1. 由于爬虫爬取数据的过程依次为:获取数据、处理数据、储存数据这三部分。所以这篇笔记将会按照这个顺序进行。
1. requests库,是一个专注于发送HTTP请求的库。 2. 安装requests库:pip install requests。
pip install requests
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)
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
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')
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. 元素与元素之间的关系可以分为祖先–后代、祖先–直接后代、兄弟–兄弟三类。
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)