【Python】从爬虫小白到大佬(二)
凡是过往,皆为序章。
前言
1. 由于爬虫爬取数据的过程依次为:获取数据、处理数据、储存数据这三部分。所以这篇笔记将会按照这个顺序进行。
获取数据
requests库
1. requests库,是一个专注于发送HTTP请求的库。
2. 安装requests库:pip install requests。
pip install requests
get()方法
1. get()方法帮助用户向服务器发出请求,并且返回用户收到的响应。
2. get()方法的参数是要爬取的网址,并使用res变量储存接收到的响应。
response = requests.get('网址')
消息头
1. 这里以豆瓣Top250为例,进行爬取。
2. 用户使用get()方法获取的响应是一个类对象,如果直接打印,则会打印出类名和响应码。
3. 而此时这里的响应码是418:服务器拒绝冲泡咖啡,因为它是一个茶壶。即服务器直接识别了这是一个爬虫而且用户,所以拒绝了用户的要求。
4. 服务器识别的依据是消息头中的:user-agent。
5. 所以,用户需要重新定制一个消息头,然后还需在get()方法中申明headers新的定义,此时这里的响应码是200,说明伪装成功。
6. 如果用户想看看响应内容,则打印res.text,输出的正是网页的HTML源代码。
headers ={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
import requests
from bs4 import BeautifulSoup
headers ={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
res = requests.get('https://book.douban.com/top250/',headers=headers)
处理数据
BeautifulSoup库
1. BeautifulSoup库,通过将网页源代码解析成BeautifulSoup对象,变成一个树状结构,可以把结构复杂的网页代码内部组织关系捋清楚。
2. 安装BeautifulSoup库:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4
BeautifulSoup类
1. BeautifulSoup对象作用: 把HTML文档解析成树形结构。
2. 创建BeautifulSoup对象时,需要传入两个参数:需要解析的HTML文档,用于解析HTML文档的解析器'html.parser'。
3. BeautifulSoup对象的值是一个树形结构的HTML文档。
import requests
from bs4 import BeautifulSoup
headers ={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
res = requests.get('https://book.douban.com/top250/',headers=headers)
soup=BeautifulSoup(res.text,'html.parser')
提取数据
CSS选择器
基本选择器
1. CSS选择器是CSS语言中的一部分,能通过HTML元素的类型、标识和关系快速选择符合条件的所有元素,称为元素选择器。
2. 打开开发者工具,切换到元素面板,按Ctrl+F打开搜索栏,搜索栏会提示你通过字符串、CSS选择器、XPath检索,在搜索栏内输入div(或者其他元素),表示检索此类型元素,此时开发者工具会将所有符合条件的内容用黄色底色标注出来。
3. 其中靠class属性值检索的选择器被称为类选择器,需要写成'.xxx',表示检索所有class属性值为xxx的元素;靠ID属性值检索的被称为ID选择器,需要写成#xxx,表示检索所有ID属性值为xxx的元素。
4. 类选择器、ID选择器与元素选择器一起并称为基本选择器。
5. 类选择器、ID选择器通常不会孤立出现,而是配合元素选择器一起使用。
组合选择器
1. 基本选择器无法满足我们需求时,我们可以转换思路,根据元素与其它元素之间的关系,将若干个基本选择器组合起来形成组合选择器,进一步提升检索精确度。
2. 元素与元素之间的关系可以分为祖先–后代、祖先–直接后代、兄弟–兄弟三类。
select()方法
1. BeautifulSoup对象有一个名为select()的方法。我们将CSS选择器传进去,它会返回一个列表,列表中每个元素都是符合条件的检索结果。
2. 此时的结构是一个列表,也是一个Tag对象,有特定的方法去截取需要的信息。
# 导入 requests 库
import requests
# 从 bs4 库导入 BeautifulSoup
from bs4 import BeautifulSoup
# 定制消息头
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (HTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
# 向 https://book.douban.com/top250/ 发送带消息头的请求
# 并将响应结果储存到 res 变量中
response=requests.get('https://book.douban.com/top250/',headers=headers)
# 将响应结果的文本内容解析为 BeautifulSoup 对象
# 并保存到变量 soup 中
soup=BeautifulSoup(response.text,'html.parser')
# 所有书名所在元素
book_name=soup.select('div.a')
# 所有书籍信息所在元素
book_info=soup.select('p.pl')
# 遍历每本图书
for everyone in book_info:
# 获取书籍信息
info=everyone.text
# 按“ / ”分割字符串
info_list=info.split('/')
# 结果列表中第一项为作者信息
author=info_list[0]
# 倒数第三项为出版社信息
publish=info_list[-3]
# 打印作者、出版社信息
print(author,publish)
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!
作者:星霜旅人