如何用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 将代码打包成程序文件。
原创不易,点个赞支持一下吧👍