首先打开我们的p站进行抓包
在这里插入图片描述

不好意思,不好意思 输错了在这里插入图片描述

我们今天要爬取的内容是p站的排行榜在这里插入图片描述
在我们往下滑的时候进行抓包会发现有个包
在这里插入图片描述
这是一个ajax请求,就是获取排行榜页面的包

再用F12开发者工具点击图片
在这里插入图片描述
我们可以发现当我们点击这个链接以后会跳转到这个图片的具体页面,我们只需要它后面的数字部分就是它的ID,在进入图片的详细页后
在这里插入图片描述
点击查看网页源代码仔细检查后可以发现
在这里插入图片描述
点击这个地址后可以发现是图片的实际地址,我们可以发现这个illust_id参数是正是图片的ID

所以我们可以先获取图片的ID然后再发送请求下载图片

代码如下

import requests
from lxml import etree
import time
# 进行UA伪装
header = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36x-requested-with: XMLHttpRequest'
}
for num in range(1,100):

    url = "https://www.pixiv.net/ranking.php"
    param = {
        'p': num
    }
    # 获取排行榜页面
    response = requests.get(url=url,headers=header,params=param).text
    # 建立xpath正则 获取ID
    tree = etree.HTML(response)
    img_id_list = tree.xpath('//*/div/a/@href')[3:]
    for each in img_id_list:
        if 'series' in each:
            continue
        url = "https://embed.pixiv.net/decorate.php"
        # each 是/artworks/87898731
        # 由此我们进行切片获取具体ID
        date_id = each[10:]
        param = {
            "illust_id":date_id
        }
        img_data = requests.get(url=url,params=param,headers=header).content
        # 设置图片名字
        img_file_name = date_id+'.jpg'
        # 写入图片
        with open(img_file_name,'wb') as fp:
            fp.write(img_data)
            print(img_file_name+"下载成功")

        # 防止被封 加个延迟
        time.sleep(0.5)
最后修改:2022 年 11 月 14 日
如果觉得我的文章对你有用,请随意赞赏