吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1270|回复: 14
收起左侧

[求助] python爬虫求助

[复制链接]
lzhlmcl 发表于 2021-8-23 20:15
25吾爱币
爬取wallhaven图片时,在代码第23行总会错误,显示为IndexError: list index out of range;经过排查发现似乎是获取的是空值导致了这个原因,尝试过添加cookies也没有解决.求助各位大佬
[Python] 纯文本查看 复制代码
# -*- 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')[0]
		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('存储完成!')

最佳答案

查看完整内容

每次请求打印状态码出来,text打印出来,设置timeout, 实在不行在for循环里面try一下,看下错误再分析分析

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

johnMC 发表于 2021-8-23 20:15
lzhlmcl 发表于 2021-8-23 23:35
感谢,应该不是这个问题,如我楼上回复的,我重新测试能够跑了,但就是速度特别慢,跑到第4页就不动了,我想问 ...

每次请求打印状态码出来,text打印出来,设置timeout, 实在不行在for循环里面try一下,看下错误再分析分析
muyan1995 发表于 2021-8-23 21:22
试试改成这样
[Python] 纯文本查看 复制代码
image_src_url = detail_tree.xpath('//img[@id="wallpaper"]/@src')[0] if detail_tree.xpath('//img[@id="wallpaper"]/@src')[0] else ''
咸鱼灭 发表于 2021-8-23 21:34
我运行没问题,怕报错你可以加个判断试试
[Python] 纯文本查看 复制代码
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[0])
            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('存储完成!')

johnMC 发表于 2021-8-23 23:13
上面写几楼写的都可以,如果还频繁出现的话,看下状态码是不是200,还有是不是访问频率太高,被禁了,导致xpath解析失败
 楼主| lzhlmcl 发表于 2021-8-23 23:27
muyan1995 发表于 2021-8-23 21:22
试试改成这样[mw_shl_code=python,true]image_src_url = detail_tree.xpath('//img[@id="wallpaper"]/@src' ...

感谢大佬回复,,因为电脑老是因为内存条的原因死机,我就拆了一根,,然后就想到内存会不会影响到代码,,,于是重新测试了发现就能够正常运行,我也不太懂其中的原理,我想问问大佬有没有黑马比较新的python课程再学习一下..
 楼主| lzhlmcl 发表于 2021-8-23 23:31
johnMC 发表于 2021-8-23 23:13
上面写几楼写的都可以,如果还频繁出现的话,看下状态码是不是200,还有是不是访问频率太高,被禁了,导致x ...

感谢大佬回复,,因为电脑老是因为内存条的原因死机,我就拆了一根,,然后就想到内存会不会影响到代码,,,于是重新测试了发现就能够正常运行,我也不太懂其中的原理,我想问问大佬有没有黑马比较新的python课程再学习一下..
 楼主| lzhlmcl 发表于 2021-8-23 23:35
johnMC 发表于 2021-8-23 23:13
上面写几楼写的都可以,如果还频繁出现的话,看下状态码是不是200,还有是不是访问频率太高,被禁了,导致x ...

感谢,应该不是这个问题,如我楼上回复的,我重新测试能够跑了,但就是速度特别慢,跑到第4页就不动了,我想问下有没有什么解决方法
prince_cool 发表于 2021-8-24 00:05
本帖最后由 prince_cool 于 2021-8-24 00:07 编辑

我看xpath是不是可以直接用这个啊  //img/@data-src  ;不需要再访问多一个网址了
AsuraSong 发表于 2021-8-24 00:16
楼主说拆掉内存后可以正常使用,是不是因为本身软件没有匹配双通道?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表