听说流行写爬取妹子图爬虫,我也来一个

先上代码

import requests
from bs4 import BeautifulSoup
import os


def html_url(n):
    url = 'http://www.win4000.com/meinv{}.html'.format(n)
    html_url = requests.get(url)
    html = html_url.text
    return html


def jiexi(html):
    soup = BeautifulSoup(html,'html.parser')
    title_tag = soup.find('h1')
    title = title_tag.string


    image_tag = soup.find('div',{'id','pic-meinv'})
    img = image_tag.find('img')
    picture = img.attrs['data-original']


    time_tag = soup.find('em')
    time = time_tag.contents[0]


    return title,picture,time


def save(title,picture,time):
    if not os.path.exists(title):
        os.makedirs(title)
    print('正在下载第{}张图片'.format(time))
    ext = picture.split('.')[-1]   # 拿到扩展名
    filename = title + '/' + title + time + '.' + ext
    content = requests.get(picture).content
    with open(filename,'wb') as f:
        f.write(content)
    


if __name__ == '__main__':
    for i in range(197307,0,-1):
        html = html_url(str(i))
        title,picture,time = jiexi(html)
        print('正在下载 {}'.format(title))
        save(title,picture,'1')
        for j in range(int(time)-1):
            html = html_url(str(i)+'_'+str(j+2))
            title,picture,_=jiexi(html)
            save(title,picture,str(j+2))

再上效果图

在这里插入图片描述

在云服务器上运行的效果图

在这里插入图片描述
在这里插入图片描述

1.查看要爬取的网站

我是从197307 郑爽这块往回遍历的
url = http://www.win4000.com/meinv197307.html

得到网站的html
html = requests.get(url).text

2.分析网页

2-1 分析图片url
第一张图片的url为:http://www.win4000.com/meinv197307.html
第二张图片的url为: http://www.win4000.com/meinv197307_2.html
我们发现后边的多了个’_'下划线,加数字2,所以我们这块后期要做处理

2-2.右键‘检查’查看该图片标题

在这里插入图片描述
在这里插入图片描述
包含在一个h1标签内,所以我们查找的时候直接查找到该标签也就是:
title_tag = soup.find(‘h1’)
title = title_tag.string

2-3 右键‘检查’查看这个标题的图片一共有几张在这里插入图片描述
在这里插入图片描述
可以看到在一个em标签内,所以我们直接获取
time_tag = soup.find(‘em’)
time = time.tag.contents[0]

2-4 右键‘检查’图片的标签和具体地址在这里插入图片描述可以看到 在一个 div标签内id为‘pic-meinv’里所以
div_tag = soup.find(‘div’,{‘id’:‘pic-meinv’})
再寻找div标签内的img标签
img = image_tag.find(‘img’)
我们自己查看下img标签内哪个是自己想要的图 发现在‘data-origina’后的是所以
picture = img.attrs[‘data-original’]
所以我们现在得到了图片的URL,图片的标题,一套图片的张数

3.保存图片

3-1 首先我们用os模块检查当前脚本目录下有没有刚才图片标题的文件夹,没有我们就创建一个
if not os.path.exists(title):
os.makedirs(title)
3-2 再打个log查看我们下载第几张图
print(‘正在下载第{}张图片’.format(time))
3-3 拿到图片的扩展名
ext = picture.split(’.’)[-1] # 拿到扩展名
3-4 得到图片保存的目录,文件的名字
filename = title + ‘/’ + title + time + ‘.’ + ext
3-5 得到图片二进制文件
content = requests.get(picture).content
3-6 以二进制方法打开,写入图片,保存
with open(filename,‘wb’) as f:
f.write(content)

我们把各个函数模块链接起来,前文说的第二张图片下划线加数字,我们后边进行了处理
OK大工告成

最开始我requests的时候,模拟了浏览器的user-agent,
也就是
headers = {
‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’
}
request.get(url,headers=headers).text
但是模拟了headers后经常会爬不到网页,显示Nonetype,有没有大神能告知为何如此

目前爬了2000多张图没有问题
可以更改初始爬取的网页代码在这里插入图片描述
改了这个可以从这个网站你想要的开始爬取

完整代码请看开头。第一次写的不太好,希望大家指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值