1 urllib爬虫库介绍
- Python内置HTTP请求库,不需要额外安装
- 官方链接:https://docs.python.org/3/library/urllib.html
- 4个模块
(1)urllib.request:可以⽤来发送request和获取request的结果
(2)urllib.error:包含了urllib.request产⽣的异常
(3)urllib.parse:⽤来解析和处理URL
(4)urllib.robotparse:⽤来解析⻚⾯的robots.txt⽂件
2 实例演示
案例:爬取百度新闻⾸⻚的新闻标题信息,url地址:http://news.baidu.com/
具体实现步骤
1.导⼊urlib库和re正则
2.使⽤urllib.request.Request()创建request请求对象
3.使⽤urllib.request.urlopen执⾏信息爬取,并返回Response对象
4.使⽤read()读取信息,使⽤decode()执⾏解码
5.使⽤re正则解析结果
6.遍历输出结果信息
2.1代码实现
'''
案例:爬取百度新闻首页的新闻标题信息
url地址:http://news.baidu.com/
'''
# 1 导入库
from urllib import request
import re
# 2 准备url地址,创建请求对象
url = 'http://news.baidu.com/'
req = request.Request(url)
# 3 发送请求获取response
res = request.urlopen(req)
# 4 解析结果:从响应对象中读取信息并解码
html = res.read().decode('utf-8')
# print(html)
pat = '<a href="(.*?)" mon=".*?" target="_blank">(.*?)</a>'
dlist = re.findall(pat,html)
print(dlist)
# 5 存储/输出结果
for v in dlist:
if v[1] != '#{title}':
print(v[1]+":"+v[0])
2.2 利用正则表达式进行结果解析
正则表达式官方参考文档:https://docs.python.org/zh-cn/3/library/re.html
# 1 导入库
from urllib import request
import re
# 2 准备url地址,创建请求对象
url = 'http://news.baidu.com/'
req = request.Request(url)
# 3 发送请求获取response
res = request.urlopen(req)
# 4 解析结果:从响应对象中读取信息并解码
html = res.read().decode('utf-8')
print(html)
- 对网页内容进行输出后查看爬取的内容
<li class="bold-item"><a href="http://baijiahao.baidu.com/s?id=1676551984169544562" target="_blank" mon="a=9">5G还没用上,4G却越来越慢了?</a></li>
<li><a href="http://baijiahao.baidu.com/s?id=1676519964597345236" target="_blank" mon="a=9">二线网约车集体反攻滴滴</a></li>
<li><a href="http://baijiahao.baidu.com/s?id=1676500046896479892" target="_blank" mon="a=9">微软三杰</a></li>
<li><a href="http://baijiahao.baidu.com/s?id=1676511390908527616" target="_blank" mon="a=9">京东方,落后者的宿命</a></li>
<li><a href="http://baijiahao.baidu.com/s?id=1676498875100894367" target="_blank" mon="a=9">为什么互联网公司纷纷收购电竞战队?</a></li>
- 查看到新闻标题内容之后,书写正则表达式进行内容解析
pat = '<a href="(.*?)" mon=".*?" target="_blank">(.*?)</a>'
3 小结
-
网络爬虫运行时序图
在正式爬取过程中,我们只需要关注URL管理器,解析器和应用,调度器和下载器在框架内部封装完成。
⽹络爬⾍使⽤的技术--数据抓取
- 在爬⾍实现上,除了scrapy框架之外,python有许多与此相关的库可供使⽤。其中,在数据抓取⽅⾯包括: urllib(urllib3)、requests、mechanize、selenium、splinter;
- 其中,urllib(urllib3)、requests、mechanize⽤来获取URL对应的原始响应内容;⽽selenium、splinter通过加载浏览器驱动,获取浏览器渲染之后的响应内容,模拟程度更⾼。
- 考虑效率、当然能使⽤urllib(urllib3)、requests、mechanize等解决的尽量不⽤selenium、splinter,因为后者因需要加载浏览器⽽导致效率较低。
- 对于数据抓取,涉及的过程主要是模拟浏览器向服务器发送构造好的http请求,常⻅类型有:get/post。
⽹络爬⾍使⽤的技术--数据解析
- 在数据解析⽅⾯,相应的库包括:lxml、beautifulsoup4、re、pyquery。
- 对于数据解析,主要是从响应⻚⾯⾥提取所需的数据,常⽤⽅法有:xpath路径表达式、CSS选择器、正则表达式等。
- 其中,xpath路径表达式、CSS选择器主要⽤于提取结构化的数据。⽽正则表达式主要⽤于提取⾮结构化的数据。