用Python一晚上爬取P站几万张图片的详细教程

使用Python的requests加re库爬取P站图片并下载,作者下载了47129页爬取到2万多站图片。爬取使用时间20小时。总共可以爬几十万多页的,但是太多了,博主只爬取了4万页就停止了。大家可以根据自己的需求爬取。


 

解析网页

本次使用requests库和re库,requests库可以查看我的教程:我们来一起学Python爬虫吧-第一章requests库_PYmili的博客-CSDN博客 

re库的使用方法可以查看我的教程:Python超详细的正则表达式_PYmili的博客-CSDN博客_python正则表达式

请先下载requests库,要爬取网站:P站-Pixiv-原创画师分享平台-触站(原画师通)

pip install requests

我们随便打开一个作品想查看源码

 

 查看源码得知其中的图片链接藏在其中

<script type="application/ld+json">
                {
  "@context": "https://ziyuan.baidu.com/contexts/cambrian.jsonld",
  "@id": "https://www.huashi6.com/draw/174366",
  "title": "水滴石穿的好女人",
  "images": [
    "//img2.huashi6.com/images/resource/2019/06/06/7507844h7p0.png?imageMogr2/quality/100/interlace/1/thumbnail/800x/format/jpeg",
    "//img2.huashi6.com/images/resource/2019/06/06/7507844h7p1.png?imageMogr2/quality/100/interlace/1/thumbnail/800x/format/jpeg"
  ],
  "description": "“滴水系列”让·奥鲁塔和表情差。泳装快乐…。夏天受欢迎了!FGO和游戏部出本!布景也加油! !◎你的社团“necomicle”,星期一被安排在西地区“A”块- 38a。网页目录→twitter: twitter/necomi_info",
  "pubDate": "2021-12-08T16:59:54",
  "upDate": "2021-12-08T16:59:54"
}
        </script>

那我们获取其中的源码就可以获得链接

r=requests.get(url=_url)
scr=re.search('<script type=.*?>(.*?)</script>', str(r.text), re.S)

单单获取一页内容是不行的,但是每一页代码都是一页的模板,那么就好办了。全部代码如下:

import requests
import re

import os
import time

"""
主函数获取网页代码解析并保存
"""
def main(_url): #_url 请求地址
    print(_url)
    r=requests.get(url=_url)
    scr=re.search('<script type=.*?>(.*?)</script>', str(r.text), re.S)    #解析script
    if not scr:
        print("Error")
    else:
        for i in scr.group(1).split(','):
            image=re.search('(//img2.huashi6.com/images/resource/.*?)\?(.*?)"', i ,re.S)  #提取图片url
            if not image:
                pass
            else:
                print(image.group(1))
                #    保存
                try:
                    req=requests.get(url="https:"+image.group(1))
                    p,f=os.path.split(image.group(1))
                    with open(f"Index_Image\{f}", "wb") as w:
                        w.write(req.content)
                    print("True")
                except:
                    print("False")
if __name__ in "__main__":
    for i in range(6900, 70000):#6900为要爬取的第一页,70000为要爬取至页数
        main(f"https://www.huashi6.com/draw/{i}")
        time.sleep(4)    #控制速度以免网站封掉ip

有问题可以联系QQ群:706128290

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pymili

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值