糗事百科-动态获取全部页码数并爬取图片

练习

import requests
import json


if __name__ == "__main__":
    # 指定url
    url = 'https://pic.qiushibaike.com/system/pictures/12348/123484325/medium/6UZ51MRIVF06EX0A.jpg'
    # 进行UA伪装
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
    }
    # content返回的是二进制形式的图片数据
    # text(字符串) content(二进制) json() (对象)
    img_data = requests.get(url=url).content
    # 'wb'为写入二进制
    with open('./qiutu.jpg','wb') as fp:
        fp.write(img_data)

新学知识:正则表达式在解析界面时一般会用到re.S

爬取糗事百科图片

在这里插入图片描述
查看网页的源码我们可以在翻页栏这里看到存有页数的信息,通过正则表达式去获取到最后一项对应的页数,即为总页数
正则的形式可以写成:'<span class="page-numbers">(.*?)</span>'
下面是完整代码

import requests
import json
import re
import os

if __name__ == "__main__":
    # 创建一个文件加用来保存所有图片吗
    if not os.path.exists('./qiutuLibs'):
        os.mkdir('./qiutuLibs')
    # 进行UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
    }
    # 设置一个通用的url模板
    # 指定url
    url = 'https://www.qiushibaike.com/imgrank/page/%d'
    # 获取总页数
    url_first = 'https://www.qiushibaike.com/imgrank'
    page_text = requests.get(url=url_first, headers=headers).text
    page_nums = re.findall('<span class="page-numbers">(.*?)</span>', page_text, re.S)
    page_num = int(page_nums[-1])
    # 遍历每一页
    for pageNum in range(1,page_num+1):
        # 对应页码的url
        new_url = format(url%pageNum)
        # 使用通用爬虫对url对用的一整张页面进行爬取
        page_text = requests.get(url=new_url, headers=headers).text
        # 使用聚焦爬虫将页面中所有的图片解析提取
        ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
        # 正则作用在数据解析一般使用re.S
        img_src = re.findall(ex,page_text,re.S)
        # print(img_src)
        for src in img_src:
            # 协议头拼接,形成完整url
            src = 'https:'+src
            # 请求到了图片的二进制数据
            img_data = requests.get(url=src, headers=headers).content
            # 生成图片名称
            img_name = src.split('/')[-1]
            imgPath = r'./qiutuLibs/'+img_name
            with open(imgPath,'wb') as fp:
                fp.write(img_data)
                print(img_name,"下载成功!!!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值