python爬虫求助
爬取wallhaven图片时,在代码第23行总会错误,显示为IndexError: list index out of range;经过排查发现似乎是获取的是空值导致了这个原因,尝试过添加cookies也没有解决.求助各位大佬# -*- coding:utf-8 -*-import requests
import time
from lxml import etree
li_list = []
start_time = time.time()
for page in range(1, 23):
url = f'https://wallhaven.cc/search?q=car&categories=111&purity=111&sorting=relevance&order=desc&page={page}'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'
}
page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
now_li_list = tree.xpath('//a[@class="preview"]/@href')
print(f'第{page}页获取到{len(now_li_list)}张图片!!')
print('正在获取详情页....')
for image_url in now_li_list:
detail_page = requests.get(url=image_url, headers=headers).text
detail_tree = etree.HTML(detail_page)
image_src_url = detail_tree.xpath('//img[@id="wallpaper"]/@src')
li_list.append(image_src_url)
print(f'添加{image_url[-10:]}完成..')
time.sleep(0.2)
end_time = time.time()
print(f'总共获取到{len(li_list)}张图片....')
print(f'耗时{end_time - start_time}秒...')
with open('url.txt', 'a', encoding='utf-8') as f:
for url in li_list:
f.write(url + '\n')
print('存储完成!')
lzhlmcl 发表于 2021-8-23 23:35
感谢,应该不是这个问题,如我楼上回复的,我重新测试能够跑了,但就是速度特别慢,跑到第4页就不动了,我想问 ...
每次请求打印状态码出来,text打印出来,设置timeout, 实在不行在for循环里面try一下,看下错误再分析分析 试试改成这样image_src_url = detail_tree.xpath('//img[@id="wallpaper"]/@src') if detail_tree.xpath('//img[@id="wallpaper"]/@src') else '' 我运行没问题,怕报错你可以加个判断试试
import requests
import time
from lxml import etree
li_list = []
start_time = time.time()
for page in range(2):
url = f'https://wallhaven.cc/search?q=car&categories=111&purity=111&sorting=relevance&order=desc&page={page}'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'
}
page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
now_li_list = tree.xpath('//a[@class="preview"]/@href')
print(now_li_list)
print(f'第{page}页获取到{len(now_li_list)}张图片!!')
print('正在获取详情页....')
for image_url in now_li_list:
detail_page = requests.get(url=image_url, headers=headers).text
detail_tree = etree.HTML(detail_page)
image_src_url = detail_tree.xpath('//img[@id="wallpaper"]/@src')
if image_src_url:
li_list.append(image_src_url)
print(f'添加{image_url[-10:]}完成..')
time.sleep(0.2)
end_time = time.time()
print(f'总共获取到{len(li_list)}张图片....')
print(f'耗时{end_time - start_time}秒...')
with open('url.txt', 'a', encoding='utf-8') as f:
for url in li_list:
f.write(url + '\n')
print('存储完成!')
上面写几楼写的都可以,如果还频繁出现的话,看下状态码是不是200,还有是不是访问频率太高,被禁了,导致xpath解析失败 muyan1995 发表于 2021-8-23 21:22
试试改成这样image_src_url = detail_tree.xpath('//img[@id="wallpaper"]/@src' ...
感谢大佬回复,,因为电脑老是因为内存条的原因死机,我就拆了一根,,然后就想到内存会不会影响到代码,,,于是重新测试了发现就能够正常运行{:1_896:},我也不太懂其中的原理,我想问问大佬有没有黑马比较新的python课程再学习一下.. johnMC 发表于 2021-8-23 23:13
上面写几楼写的都可以,如果还频繁出现的话,看下状态码是不是200,还有是不是访问频率太高,被禁了,导致x ...
感谢大佬回复,,因为电脑老是因为内存条的原因死机,我就拆了一根,,然后就想到内存会不会影响到代码,,,于是重新测试了发现就能够正常运行{:1_896:},我也不太懂其中的原理,我想问问大佬有没有黑马比较新的python课程再学习一下.. johnMC 发表于 2021-8-23 23:13
上面写几楼写的都可以,如果还频繁出现的话,看下状态码是不是200,还有是不是访问频率太高,被禁了,导致x ...
感谢,应该不是这个问题,如我楼上回复的,我重新测试能够跑了,但就是速度特别慢,跑到第4页就不动了,我想问下有没有什么解决方法 本帖最后由 prince_cool 于 2021-8-24 00:07 编辑
我看xpath是不是可以直接用这个啊//img/@data-src;不需要再访问多一个网址了 楼主说拆掉内存后可以正常使用,是不是因为本身软件没有匹配双通道?
页:
[1]
2