1. 爬虫的定义及作用
在介绍Python爬虫的基础知识点之前,我们要先明确什么是爬虫以及爬虫的作用。简单来说,爬虫就是一种自动化程序,用来从互联网上抓取数据。
爬虫的作用:
检索互联网上的数据,为后续分析预处理数据
监测互联网上的信息,如网络舆情、商品价格等
通过数据挖掘和机器学习的方式对数据进行分析,用于商业应用,如推荐系统、广告投放等
2. 爬虫的基础流程
一个完整的爬虫过程通常包括以下几个步骤:
确定爬取的目标网站和起始链接
发送HTTP请求,并获取网页HTML源代码
对HTML源代码进行解析,提取有用的数据信息
将数据保存到本地数据库或文件
2.1 发送HTTP请求
在Python中,我们可以使用requests库来发送HTTP请求,并获取网页HTML源代码。requests库是Python中一个非常流行的HTTP库,可以方便地处理HTTP请求和响应。
import requests
# 发送HTTP Get请求
response = requests.get('https://www.baidu.com/')
# 输出响应的状态码
print(response.status_code)
# 输出响应的HTML源代码
print(response.text)
当我们使用requests.get()方法发送HTTP请求之后,可以通过response.status_code属性获取响应的状态码,通过response.text属性获取网页的HTML源代码。
2.2 解析HTML源代码
在获取网页的HTML源代码之后,我们需要对其进行解析,才能提取出有用的数据信息。常用的HTML解析库有:Beautiful Soup、PyQuery、lxml等。
from bs4 import BeautifulSoup
html_doc = """
Python 爬虫入门
Python 爬虫是什么?
Python 爬虫是一种程序,用来自动地从互联网上收集数据。
"""
soup = BeautifulSoup(html_doc, 'html.parser')
title = soup.title.string
content = soup.find('div', class_='info').p.string
print('title:', title)
print('content:', content)
在上面的例子中,我们使用了Beautiful Soup库解析了一段HTML源代码。在具体实现中,我们首先需要创建一个BeautifulSoup对象,并将HTML源代码作为第一个参数传入;接着,我们可以使用soup.title.string和soup.find()等方法,来查找标签并获取其内部文本信息。
3. 应对反爬虫策略
根据《网络安全法》和相关政策规定,针对爬虫的反爬虫策略越来越严格。为了防止爬虫抓取数据,网站通常会采取以下一些反爬虫策略:
采用验证码技术,要求用户手动输入验证码
用户身份验证,要求用户登录后才能访问
对IP地址进行限制,禁止某些IP地址访问
对User-Agent进行限制,禁止某些User-Agent访问
为了应对反爬虫策略,我们可以采取以下一些方法:
修改请求头信息,伪造User-Agent
使用代理IP,将请求转发到不同的IP地址上进行访问
使用cookies,模拟用户登录
import requests
url = 'http://www.example.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 设置代理IP
proxies = {
'http': 'http://127.0.0.1:8000',
'https': 'https://127.0.0.1:8888'
}
# 设置cookies
cookies = {
'user': 'admin',
'password': '123456'
}
# 发送HTTP Get请求,并设置请求头、代理IP、cookies等信息
response = requests.get(url, headers=headers, proxies=proxies, cookies=cookies)
# 输出响应的状态码
print(response.status_code)
# 输出响应的HTML源代码
print(response.text)
上面的代码示例中,我们使用了requests库中的headers参数、proxies参数和cookies参数,来模拟浏览器访问网站并绕过反爬虫策略。
4. 实战演练
在学习了Python爬虫的基础知识点之后,我们可以进行一些实战演练,加深对爬虫的理解和实际操作能力。
4.1 爬取豆瓣电影Top250
我们可以使用Python来爬取豆瓣电影Top250的数据,并将其保存到本地的CSV文件中。代码如下:
import requests
import csv
from bs4 import BeautifulSoup
# 爬取页面数据
def spider_data(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = soup.find('ol', class_='grid_view').find_all('li')
for movie in movie_list:
id = movie.find('div', class_='pic').a['href'].split('/')[-2]
title = movie.find('span', class_='title').string
rating = movie.find('span', class_='rating_num').string
comments = movie.find('span', class_='inq').string if movie.find('span', class_='inq') else ''
yield {'id': id, 'title': title, 'rating': rating, 'comments': comments}
# 保存数据到CSV文件
def save_data(data_list, file_path):
with open(file_path, 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['id', 'title', 'rating', 'comments'])
writer.writeheader()
writer.writerows(data_list)
if __name__ == '__main__':
data = []
for i in range(10):
url = f'https://movie.douban.com/top250?start={i * 25}&filter='
print('正在爬取:', url)
data.extend(spider_data(url))
file_path = './douban_top250.csv'
save_data(data, file_path)
print(f'数据已保存到文件:{file_path}')
在上面的代码示例中,我们使用了requests库和BeautifulSoup库来爬取豆瓣电影Top250数据,然后使用csv库将数据保存到本地的CSV文件中。
4.2 实时监测天气信息
我们可以使用Python爬虫来实时监测天气信息,帮助我们更好地了解天气情况。代码如下:
import requests
from bs4 import BeautifulSoup
# 爬取天气信息
def spider_weather(city):
url = f'https://tianqi.moji.com/weather/china/{city}'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
temperature = soup.find('div', class_='wea_weather').em.string
humidity = soup.find('div', attrs={'class': 'wea_about clearfix'}).span['title']
return {'temperature': temperature, 'humidity': humidity}
if __name__ == '__main__':
city = 'hangzhou'
weather = spider_weather(city)
print(f'当前{city}天气情况:温度{weather["temperature"]},湿度{weather["humidity"]}')
在上面的代码示例中,我们使用了requests库和BeautifulSoup库来爬取天气信息,然后打印出当前的温度和湿度值。