Python 爬虫实战 2

目录

实战前的预备内容

实战内容:糗事百科段子内容爬取。

爬虫前分析


课程链接: https://edu.aliyun.com/course/1994?spm=5176.8764728.aliyun-edu-course-tab.1.5cb142c4uAZeNz&previewAs=member&redirectStatus=0

实战前的预备内容

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资源。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值