欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python爬虫爬取某网站动漫图片-附完整代码

程序员文章站 2022-03-31 08:00:06
最近闲来无事,发现有段时间没有博客了,于是就找个一个动漫图片网站来写写。**难度低,适合新手练习========================**网站网址:传送门我们要爬取的页面是榜单。第一步打开F12,分析请求网址。在XHR中可以很快找到网站用来存放图片信息的接口网址。我们可以很直接的看出这个接口为post请求,并且有一段需要拼接的FormData内容。这里博主还发现了这个网页的Request header中有一段很长的Cookie,但是我们还是先用requests库去请求一下再说...

声明:本项目仅供学习使用,不会对网站造成影响。

最近闲来无事,发现有段时间没有写博客了,于是就找个一个动漫图片网站来写写。
**难度低,适合新手练习========================**

网站网址:传送门

我们要爬取的页面是榜单。

第一步

打开F12,分析请求网址。
在XHR中可以很快找到网站用来存放图片信息的接口网址。
Python爬虫爬取某网站动漫图片-附完整代码

Python爬虫爬取某网站动漫图片-附完整代码

Python爬虫爬取某网站动漫图片-附完整代码
我们可以很直接的看出这个接口为post请求,并且有一段需要拼接的FormData内容。

这里博主还发现了这个网页的Request header中有一段很长的Cookie,但是我们还是先用requests库去请求一下再说。

import requests
start_url = 'https://rt.huashi6.com/front/works/rank_page?index=NaN&size=10&date='
data = requests.post(start_url)
print(data.text)

运行后发现能够返回正确的内容
Python爬虫爬取某网站动漫图片-附完整代码
这就说明这个网站不需要添加请求头,cookie并没有反爬的作用。

第二步:解析

我们这次要获取的数据为
1,图片地址
2,图片标题
3,作者(爬取图片,视频内容时建议要获取作者)

虽然获取到的数据格式为Json,但是这里我还是选择使用正则,别问为什么,就是懒。

author_list = re.findall(r'"name":"(.*?)"',data.text)
url_list = re.findall(r'"path":"(.*?)"',data.text)
title_list = re.findall(r'"title":"(.*?)"',data.text)

这时候我们就获取到了图片的作者,链接,标题。

这里要注意,我们获取到的图片链接是不全的,我们要把它拼接成完整的。

for author,url,title in zip(author_list,url_list,title_list):
    url = 'https://img2.huashi6.com/{}'.format(url)

拼接好链接,我们就可以去请求啦。

    pic_data = requests.get(url).content

因为图片为流媒体文件,所以这里我们使用的是content,将它转为二进制。

存储

将获取到的图片信息存到文件夹里面。
我们使用的是with open来读写文件。
我们可以直接在项目目录下新建一个文件夹来存放文件,也可以在任何地方-如:D://data//xx, 只是如果不在项目文件中我们就要使用绝对路径。

    with open('data/{}by{}.jpg'.format(title,author),'wb')as f:
        f.write(pic_data)

Python爬虫爬取某网站动漫图片-附完整代码
这里我将图片标题与作者名拼接起来,作为图片的名称。

点开图片查看,二次元老婆果然完好无损的被我们存入文件夹里面了。

Python爬虫爬取某网站动漫图片-附完整代码
但是我们发现,我们获取到的只有几张图片。

回到网站,发现网站是以下拉的形式加载图片的。

简单哦,还是打开F12-XHR,然后我们往下拉。
发现多出来了几个网址,没错,这就是滑动后的网址。

Python爬虫爬取某网站动漫图片-附完整代码
分析网址,明显发现FormData里面的index参数发生了变化,我们每翻一页它就会加一,起始为1,最大为5。

‘’‘https://rt.huashi6.com/front/works/rank_page?index=2&size=10&date=2020-12-02
https://rt.huashi6.com/front/works/rank_page?index=3&size=10&date=2020-12-02’‘’

滑动到底部,发现这个网站是由日期分页,一样的方法。

这个网站没有当天的图片,所以我们只获取前三天的日期。

一个嵌套for循环搞定

但是运行的时候我发现一个问题,作者名可能包含特殊符号,这会导致我们读写文件时出错,所以我就写了一个异常处理,跳过这类信息。

import datetime
import requests
import re

days = 4                                               #获取最近几天的日期
today = datetime.datetime.now()
for day in range(1,days):
    offset = datetime.timedelta(days=-day)
    day_date = (today + offset).strftime('%Y-%m-%d')    # 这段为获取当前日期前三天的日期

    for i in range(6):                                  #向下滑动5页
        start_url = 'https://rt.huashi6.com/front/works/rank_page?index={}&size=10&date={}'.format(i,day_date)
        data = requests.post(start_url)
        author_list = re.findall(r'"name":"(.*?)"', data.text)
        url_list = re.findall(r'"path":"(.*?)"', data.text)
        title_list = re.findall(r'"title":"(.*?)"', data.text)

        for author, url, title in zip(author_list, url_list, title_list):
            url = 'https://img2.huashi6.com/{}'.format(url)
            pic_data = requests.get(url).content
            try:
                with open('data/{}by{}.jpg'.format(title, author), 'wb')as f:
                    f.write(pic_data)
            except:
                pass

运行之后,代码没有问题。我们的二次元老婆多了起来。

这里就是完整代码了,很简单的一个小项目,没有涉及到难点,但是也有很多坑需要避免的,非常适合新手。

喜欢爬虫的朋友可以私聊我加个好友交流一下,新手有问题的话可以直接问我,有逆向高手的话也可以一起做做项目。

代码有问题可以及时联系我

Python爬虫爬取某网站动漫图片-附完整代码

本文地址:https://blog.csdn.net/pyzzd/article/details/110673513