俗话说:“窈窕淑女,君子好逑”,美女谁不爱啊,于是就对美女网站“发起冲锋”。
首先,我们要找到我们想要爬取的详情页 4K美女
这里的图片就是我们想要的目标。
接下来,我们需要看一下这个页面的源代码进行进一步的分析。(可以选择右击检查或者使用快捷键Ctrl+Shift+I)
以第一张图片为例(代码如下):
出现了源文件标签src,我们就想去拿它后面的内容然后和‘http://pic.netbian.com’部分整和成一个链接,但是如果你提前是网页上去试的话,会出现这个结果。
(为啥是和http://pic.netbian.com这个部分整和呢,因为这是网站首页链接,哈哈哈)
是一张缩略图,不是我们想要的高清大图。
我们再仔细看一下,源文件标签上面还有一个超链接标签,点一下,来到了这个页面:
那我们就再对这个页面进行检查一次好了。
又发现了一个源文件,那我们再和‘http://pic.netbian.com’组合一下试试!
(高清图片过大,传送失败,但就是想要得到的高清图)
那么接下来就是理清思路,开始爬虫吧!
import requests
import re
import os
headers = {
'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
url='http://pic.netbian.com/4kmeinv/'
response_1=requests.get(url=url,headers=headers)
html_1=response_1.text
因为我们从详情页到高清图,中间要先去另一个页面,所以我们构造的第一个正则表达式,是去另一个页面的。
我们需要的是超链接标签href后面的内容,于是正则表达式可以这样写:
<a.*?href.+?(/tupian.+?html)
import requests
import re
import os
#创建文件夹
if not os.path.exists('D:/4K美女'):
os.mkdir('D:/4K美女')
headers = {
'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
url='http://pic.netbian.com/4kmeinv/'
response_1=requests.get(url=url,headers=headers)
html_1=response_1.text
image_urls=re.findall('<a.*?href.+?(/tupian.+?html)',html_1,re.S)
# print(image_urls)
for image_url in image_urls:
picture_urls = 'http://pic.netbian.com' + image_url
# print(picture_urls)
response_2 = requests.get(url=picture_urls, headers=headers)
html_2 = response_2.text
pictures = re.findall('<div.*?photo-pic.*?<img src="(/uploads.+?jpg).*?alt.+?"(.*?)"', html_2, re.S)
for picture in pictures:
picture_url = picture[0]
picture_src = 'http://pic.netbian.com' + picture_url#高清图的源文件链接
picture_name = picture[1] + '.jpg'#构建准备保存的图片的名称
picture_name = picture_name.encode('iso-8859-1').decode('gbk')#这里是防止图片名称出现乱码的情况
picture_data = requests.get(url=picture_src, headers=headers).content#写入文件的内容——也就是想要的高清大图啦
picture_path = 'D:/4K美女/' + picture_name#构建图片存储路径
# 保存图片
with open(picture_path, 'wb') as f:
f.write(picture_data)
print(picture_path, '下载完成')
如果想进行多页爬取,只需要给第一个url做一下for循环处理,即:
for i in range(2,5):
url='http://pic.netbian.com/4kmeinv/index_{}.html'.format(i)
response_1=requests.get(url=url,headers=headers)
html_1=response_1.text
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。