Python爬虫入门有哪些基础知识点

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库来爬取天气信息,然后打印出当前的温度和湿度值。

后端开发标签