目录
实战前的预备内容
1. 爬到 内存 中: 打开--读取---解码【忽略解码容易出错的细节问题】
data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")
2. 爬到 硬盘文件 中
urllib.request.urlretrieve(url,filename=r"D:\Users\think\wt_repository\code_Py_wwt\阿里云课程\Python爬虫\pycharm_code\urllib_jdweb.html")
3. 浏览器伪装
# 浏览器伪装
# 尝试
url = "https://www.qiushibaike.com/text/"
# data = urllib.request.urlopen(url).read().decode("utf-8", "ignore") # 语句出错,因为没有响应,远程关闭了链接,因为对方识别了爬虫
# print(data)
# 建立对象opener
opener = urllib.request.build_opener()
UA = ("User-Agent", # qq 浏览器
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3754.400 QQBrowser/10.5.4020.400"
)
opener.addheaders=[UA] # 更改头信息
urllib.request.install_opener(opener) # 安装为全局,全局生效
data = urllib.request.urlopen(url).read().decode("utf-8", "ignore") # 语句没有出错,因为浏览器头伪装了
# print(data)
print(len(data))
urllib.request.urlretrieve(url,filename=r"D:\Users\think\wt_repository\code_Py_wwt\阿里云课程\Python爬虫\pycharm_code\urllib_qiushibaike.html")
# 用户代理池 = 多个浏览器防止反爬虫。
uapools = [
# 我的Edge 浏览器
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134",
# google 浏览器
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
# qq 浏览器
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3754.400 QQBrowser/10.5.4020.400",
]
def UA():
opener = urllib.request.build_opener()
thisua = random.choice(uapools)
ua=("User-Agent", thisua)
opener.addheaders=[ua]
urllib.request.install_opener(opener)
print("当前使用UA:"+str(thisua))
for i in range(0,10):
UA()
data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
print(len(data))
# 思考,如何实现每爬5次换一次UA
for i in range(0,10):
if(i%5==0):
UA()
data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
print(len(data))
实战内容:糗事百科段子内容爬取。
课程视频中提供的站点老了,现在是视频,要爬取文本的,换网页为:已经变成了视频,网站换为:https://www.qiushibaike.com/text/
爬虫前分析
1. 知道需求,需要什么数据:段子文本数据。
2. 观察需求数据:以其中一个段子为例,进行定位。
按 ctrl + F 打开搜索框,搜“小时候”,看段子上面有什么比较明显的标签,比如<span>,通过搜索这个标签看是否可以定位到所有的段子信息。
通过<span>这个标签看是否可以定位到所有的段子信息。看到可以,但到后面会有一些干扰信息(如下),所以这个标签不可以作为定位标签精确地定位到段子信息,所以继续向上找,找到<div class=”content”>。
看<div class=”content”>这个字段是否可以唯一地找到所有段子信息,一共25个段子,发现可以全找到且唯一是段子信息,即可以通过这个字段来筛选段子。
- 所涉及的字段复制到此处,便于写出正则表达式。
<div class="content">
<span>
我侄女是幼儿园老师,她女儿归她教,别的孩子在幼儿园里哭找妈妈,小家伙倒好人家哭天喊地的找爸爸
</span>
</div>
正则表达式可写为: '<div class="content">.*?<span>(.*?)</span>.*?</div>'
3. 实现爬虫翻页功能
- 手动翻页,观察网址变化。
这是第一页:https://www.qiushibaike.com/text/
Page 2:https://www.qiushibaike.com/text/page/2/
Page 3:https://www.qiushibaike.com/text/page/3/
观察规律,猜测第一页是:https://www.qiushibaike.com/text/page/1/
发现可以访问过去。
所以,总结:变换的是 page/ 后面的数字。
4. 下面可以开始写代码
在 “Urllib_糗事百科.py” 中,见我的CSDN资源。