本帖最后由 user999 于 2022-4-22 21:51 编辑
目标网站代码里有。。不敢直接放是因为衣服太少。不合适。
起始页面是一个排行页面,是单页,遍历一遍以后,进入子页面,是一个需要翻页的页面。
我这里对页面处理的办法,就是直接XPATH对应元素,然后统计里面的个数。弄了个小循环。
然后保存的时候,每个目标开始都有提示在爬谁,中途有提示一共多少页,当前多少页。最后结束的时候,有对应的中期提示和完全结束的提示。
因为我这网络不行,我就爬了第一个。目测没啥问题。
代码很水,我是初学者,佬勿喷新,新学的小伙伴,我们可以一起提高。
注:我还没研究明白函数,所以当下只能纯手撸。。。。
[Python] 纯文本查看 复制代码 #!/usr/bin/evn python 3
# -*- coding: utf-8 -*-
import requests
import parsel
import os
url = 'https://www.imn5.net/hot.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.36'
}
# 网址头部备用,注意不需要留/
web = 'https://www.imn5.net'
linkTemp = requests.get(url=url, headers=headers)
# 源码中文乱码,处理一下
linkTemp.encoding = linkTemp.apparent_encoding
linkAll = parsel.Selector(linkTemp.text).xpath('//div[@class="excerpts"]/article//div[@class="imgbox"]')
for linkScan in linkAll:
title = linkScan.xpath('./a/@alt').get()
linkDown = linkScan.xpath('./a/@href').get()
linkUse = web + linkDown
picTemp = requests.get(url=linkUse, headers=headers)
picTemp.encoding = picTemp.apparent_encoding
# 统计一下页码总数,作为下一个循环参考
picPage = len(
parsel.Selector(requests.get(url=linkUse, headers=headers).text).xpath('//div[@class="page"]/a').getall()) - 1
# 去掉地址当中.html部分
linkUse_1 = linkUse.replace('.html', '')
if not os.path.exists('img\\' + title):
os.mkdir('img\\' + title)
print(f'---正在保存{title}---')
# 注意页码需要在基础上+1
for page in range(1, picPage + 1):
linkUse_2 = linkUse_1 + '_' + str(page) + '.html'
picDown = parsel.Selector(requests.get(url=linkUse_2, headers=headers).text).xpath(
'//div[@class="imgwebp"]/p/img/@src').getall()
print(f'---一共{picPage}页,当前第{page}页---')
for picScan in picDown:
picAdd = web + picScan
picData = requests.get(url=picAdd, headers=headers).content
filename = picScan.split('/')[-1]
with open(f'img\\{title}\\{filename}', 'wb') as f:
f.write(picData)
print('---当前相册完毕,进入下一轮任务---')
print('所有任务全部完毕,请注意身体')
|