从0开始学python网络爬虫----------2
爬虫三大库
上一篇博客对库有了初步概念,接下来将对爬虫三大库深入了解
- 库的下载与使用
- 库的下载
下载第三方库一般可以直接在命令提示符中输入pip install packagename其中packagename为要下载的库名。安装完成后会有提示:
Successfully installed packagename - 库的使用
下载好库以后,我们就可以调用库格式为:import packagename
- 库的下载
- Requests库
requests库的官方文档指出:让HTTP服务人类,细心的读者会发现requests库的作用就是请求获取网页数据
请求头的使用
import requests#导入模块(也叫库)
#headers为请求头的一部分
headers={'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.52'}
url='https://blog.csdn.net/PXXPY/article/details/107594925'#请求网址
response=requests.get(url=url,headers=headers)#发送请求
print(response)#返回状态码
print(response.text)#打印源代码
request库不仅有get()方法还有post()方法。post()方法用于表单提交来爬取需要登录才能获取的数据,这部分会在后面讲述,学习get()方法足够我们爬取大部分网站了
3. BeautifulSoup库
BeautifulSoup库是一个非常流行的python模块,通过BeautifulSoup库可以轻松的解析Rquests库请求的数据,并把网页源代码解析为Soup文档以便过滤提取数据
from bs4 import BeautifulSoup
import requests
url='http://bj.58.com/pingbandiannao/24604629984324x.shtml'
response = requests.get(url)
soup = BeautifulSoup(response.text,'html.parser')
BeautifulSoup库除了支持python标准库中的HTML解释器外还支持第三方解释器
解释器 | 使用方法 | 优点 | 缺点 |
---|---|---|---|
python标准库 | BeautifulSoup(response.text,‘html.parser’) | 执行速度适中,容错强 | python3.2.2以前的版本中容错能力差 |
lxml HTML解析器 | BeautifulSoup(response.text,‘lxml’) | 速度快,容错强 | 需要安装C语言库 |
Lxml XML解析库 | BeautifulSoup(response.text,‘xml’) | 速度快,唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(response.text,’‘html5lib) | 最好容错性,以浏览器的方式解析文档,生成HTML5格式的文档 | 速度慢,不依赖外部拓展 |
BeautifulSoup库官方推荐使用lxml作为解释器,应为效率更高
解析的Soup文档可以使用find()和fond_all()方法及selector()方法定位所需要的元素。find()和find_all()两个方法用法相似,BeautifulSoup文档中对这两个方法的定义是:
** find_all(tag,attibutes,recursive,text,limit,keywords)
find(tag,attibutes,recursive,text,keywords)**
c常用前两个参数
- find_all()方法
soup.findall('div',"item")#查找div标签,class="item"
soup.findall('div',class="item")
soup.findall('div',attrs={"class":"item"})#attrs定义一个字典参数来搜索包含特殊属性的tag
- find()方法
find()方法与find_all()方法相似,只不过find()方法只返回一个符合条件的数据,而find_all()方法返回所有符合条件的数据,是一个集合 - selector()方法
soup.selector('body > div.m-body > div:nth-child(3) > div > div > ul > li:nth-child(6) > a')#括号中的内容由浏览器复制得到
该方法类似于中国>四川>成都>…
3. Lxml库
Lxml库是基于libxml2这一个XML解析库的python封装,使用C语言编写,解析速度比BeautifulSoup更快