python爬虫之正则解析

python爬虫之正则解析

需求:爬取头像网中所有的头像图片
爬取图片网址如下:
头像网:
(1)右键点击需爬取的浏览器界面,点击检查;
在这里插入图片描述
(2)点击元素,观察网站源码正则表达式,在上面拖动鼠标可观察到某行表达式对应的网站内容。本网站头像图片对应的正则表达式为方框<div class="mbpho" style="height:231px;">所示。
在这里插入图片描述对应图片的源码如下:

<div class="mbpho" style="height:231px;">
<a target="_blank" class="a" href="/blog/?id=1383309060">
<img data-rootid="1383309060" alt="头像" data-iid="" src="https://c-ssl.dtstatic.com/uploads/blog/202201/23/20220123222213_2899a.thumb.400_0.jpeg" height="231">
<u style="margin-top:-231px;height:231px;" class=""></u>
</a>
<div class="collbtn" data-favorite="{&quot;id&quot;:1383309060,&quot;owner&quot;:304594,&quot;type&quot;:&quot;1&quot;}" style="position: absolute; left: 0px; bottom: 0px; display: none;">
<a class="y" href="javascript:;" title="登录才能进行操作哦,点击就可以登录啦">
收集
</a>
<a class="z" href="javascript:;" title="登录之后才能赞哦!">
点赞
</a>
<a class="x" href="javascript:;" title="登录才能评论,点击下就可以登录啦">
评论
</a>
</div>
<i class="icon-like"></i>
</div>

其中,src为所爬取的图片地址。提取src所需正则表达式如下:

ex = '<div class="mbpho" style.*?>.*?<img data-rootid.*? alt.*? data-iid.*? src="(.*?)" height.*?</div>'

爬取一整张头像图片代码如下:

#需求:爬取头像网中所有的头像图片
import requests
import re
import os
if __name__ == '__main__':
    #创建一个文件夹,保存所有的图片
    if not os.path.exists('./touxiangLibs'):
        os.mkdir('./touxiangLibs')

    url = 'https://www.duitang.com/category/?cat=avatar'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
    }
    #使用通用爬虫对url对应的一整张页面进行爬取
    page_text = requests.get(url=url,headers=headers).text
    #使用聚焦爬虫将页面中所有的头像进行解析/提取
    ex = '<div class="mbpho" style.*?>.*?<img data-rootid.*? alt.*? data-iid.*? src="(.*?)" height.*?</div>'
    img_src_list = re.findall(ex,page_text,re.S)
    # print(img_src_list)
    for src in img_src_list:
        #请求到了图片的二进制数据
        img_data = requests.get(url=src,headers=headers).content
        #生成图片名称
        img_name = src.split('/')[-1]
        #图片存储的路径
        imgPath = './touxiangLibs/'+img_name
        with open(imgPath,'wb') as fp:
            fp.write(img_data)
            print(img_name,'下载成功!!!')
  • 28
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值