查看原文
其他

如何用python快速爬取小姐姐的美图?(终极解答)

朱小五 快学Python 2022-05-28
最近有一个小伙伴拿一段python代码来问我为什么报错?

我仔细一看:是用来爬取某个网站妹子图的代码,结果发现那个网站已经404了,当然爬不到了。


其实很多初学者都喜欢拿网上的案例作为练习,但是我们的爬虫可能会对一些小网站造成负担。于是它们要么增加了反爬,要么干脆关站了,等几个月后面的初学者再拿博客上的代码去练习,自然困难重重。

授人以鱼不如授人以渔,所以今天只讲最核心的重点,不会过时。学会了可轻松爬取各种图片,不仅仅是妹子图哦。本文示例网站如下:

http://www.keaitupian.cn/meinv/13419.html

今天带大家用python获取网址中的小姐姐写真图。

获取下载链接

打开刚刚的网址,点击鼠标右键,检查,此时进入开发者模式。分析网页代码,可以轻松发现图片所在的标签。

标签内既包含了图片地址,也带有对应名称。新建标签页,复制对应图片url并打开,发现确实是图片的真实下载链接。

那我们可以利用python中的request正则构建获取函数。

def get_url(url):
    response = requests.get(url, headers=headers)
    html = response.text
    urls = re.findall(r'<img src="(.*?)"',html)
    return urls

测试一下

get_url('http://www.keaitupian.cn/meinv/13419.html')

可以看到,输出的列表包含了本页面所有的图片url。

这样我们就完成了爬取图片的第一步。

构建下载函数

第二步,构建下载函数:

def download_img(url,file_name):
    res = requests.get(url)
    img = open(file_name, 'wb')
    img.write(res.content)
    img.close()

简单解释一下,requests发起get请求拿到图片的信息。

open打开文件,以file_name(比如111.jpg)为文件名,wb代表以二进制覆盖写。

图片
  • res.text ==> 获取文本
  • res.content ==> 下载内容

这里我们下载图片使用res.content

批量下载

通过以上两步,我们就构造好了函数get_url()download_img(),下面就可以来调用函数去处理需求了。

urls = get_url('http://www.keaitupian.cn/meinv/13419.html')

for url in urls:
    name = url.split('/')[-1# 图片名字
    download_img(url,name)
print('下载完毕')

注:由于图片没有名字,就直接拿图片链接的后半部分来命名了,大家也可以换成数字等

这样就轻松爬取了网页中的所有高清大图。

后续提升

前面只给大家说了最核心的部分,即便再复杂的图片下载代码,也离不开这些核心基础。但大家在实际应用中,还是有不少提升的地方的。

1、文章一开始也提过,有一些网站反爬,要先解决反爬问题。

2、本文只演示了一个网页是如何爬取图片的,有一些小伙伴可能会想爬取全站的图片,这里就需要观察翻页效果以及url规律来构建网页链接了。

同时,不同网页对应的图片最好放在不同的文件夹了。

dir_name = re.findall('<h1 class="entry-title">(.*?)</h1>',html)[-1]
if not os.path.exists(dir_name):
    os.mkdir(dir_name)

爬取网页的对应标题作为文件名,先os判断同文件名的文件夹是否存在,如果不存在则自动创建!

3、还有一些读者朋友可能更感兴趣交互功能,那我们可以加一个input()实现一个小交互。

也可以使用一些GUI库来美化下载界面,以及pyinstaller 将代码打包成程序文件。

原创不易,点个赞支持一下吧👍

人生苦短,快学Python👍

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存