一时无聊“乱”点,点到了个图片网站,一看到mz图就行爬!( •̀ ω •́ )✧
来分析一下网站
点一下第二页,网址后面就会多出 /page/2 。点第三页也是,那么把后面的数字改成1
发现可以跳回首页。
查看网页源代码,发现没有js加密。
开搞(滑稽)
导入模块
import requests
import parsel
import os
请求一下网站
url = 'https://www.xxxxx.com/page/1'
response = requests.get(url=url)
response.encoding = response.apparent_encoding # 防止乱码
print(response.text)
打印出来后发现没有乱码。
下面来解析一下
发现图片在div class="masonry" 这个大标签里面,每一张图片对应每一个article,图片就在article下的img里面,src就是图片地址,title可以当图片名称,title是图片拍摄的日期吧大概(o゜▽゜)o☆
我们用xpath来定位一下图片。
@src是提取src里面的内容,也就是图片地址,可以看到有二十个对象
再来看看title
text()是获取文本,可以看到一样是20个(title对应图片,肯定是20个)
那么我们用parsel库来转一下
selector = parsel.Selector(response.text)
print(selector)
img_url = selector.xpath('//*[@class="masonry"]/article//a/img/@src').getall()
title_url = selector.xpath('//*[@class="masonry"]/article//h2/a/text()').getall()
print(img_url)
print(title_url)
getall()是获取所有。
看着有点难受,而且还在列表里面,我们要把它们提取出来
现在是把它们一一对应,接着就是提取
可以看到已经提取出来了,如果有不懂我们要加【0】和【1】的,可以看我前面的文章
接着对图片的地址请求一下,然后转成content
创建一个文件夹用来存图片
filename = 'img\\'
if not os.path.exists(filename):
os.mkdir(filename)
意思是如果没有一个叫img的文件夹就创建一个。
爬一页就20张。。肯定不够看的,先来个20页!!!
for page in range(1, 21):
url = 'https://www.xxxxx/page/{}'.format(page)
response = requests.get(url=url)
然后就是保存
with open(filename + title + '.jpg', mode='wb') as f:
f.write(response_1)
print(title, img_1, "爬取成功!")
效果:
完整代码如下:
import requests
import parsel
import os
filename = 'img\\'
if not os.path.exists(filename):
os.mkdir(filename)
for page in range(1, 21):
url = 'https://www.xxxxx.com/page/{}'.format(page)
response = requests.get(url=url)
response.encoding = response.apparent_encoding
# print(response.text)
selector = parsel.Selector(response.text)
# print(selector)
#
img_url = selector.xpath('//*[@class="masonry"]/article//a/img/@src').getall()
title_url = selector.xpath('//*[@class="masonry"]/article//h2/a/text()').getall()
# print(img_url)
# print(title_url)
for zip_list in zip(img_url, title_url):
# print(zip_list)
img_1 = zip_list[0]
title = zip_list[1]
response_1 = requests.get(url=img_1).content
with open(filename + title + '.jpg', mode='wb') as f:
f.write(response_1)
print(title, img_1, "爬取成功!")
最后:
一张一张看太麻烦了,直接弄成壁纸,然后几分钟切换,方便又养眼!
:very good!!
:必须good!!!!!
有些东西涉及到隐私,所以弄了码,请见谅!