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

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

网站网址:传送门

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

第一步

打开F12,分析请求网址。
在XHR中可以很快找到网站用来存放图片信息的接口网址。

我们可以很直接的看出这个接口为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)

运行后发现能够返回正确的内容

这就说明这个网站不需要添加请求头,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)

这里我将图片标题与作者名拼接起来,作为图片的名称。

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

但是我们发现,我们获取到的只有几张图片。

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

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

分析网址,明显发现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

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

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

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

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

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