问一下,我这运行会报错,是因为什么,找了半天没找到原因
from lxml import etree
import requests
html = requests.get("https://www.peterx.cn/").content.decode()
hl = etree.HTML(html)
for i in range(30):
txt = hl.xpath(f'//*[@id="content"]/div[18]/div[{i}]//text()')
url = hl.xpath(f'//*[@id="content"]/div[18]/div[{i}]//@href')
a = list(set(txt))
if a:
out = [x.strip() for x in a if x.strip() !='']
if url:
out.append(*url)
print(out)
#报错提示
Traceback (most recent call last):
File "/Users/leslie/Desktop/b/10_代码演练/xx_20爬虫lx.py", line 17, in <module>
out.append(*url)
NameError: name 'out' is not defined. Did you mean: 'oct'?
Process finished with exit code 1
url = hl.xpath(f'//*[@id="content"]/div[18]/div[{i}]//@href')这个写成/@href单斜杆
你不把报错内容贴出来,怎么帮你排查呢
报的啥错误,一般来说,你直接冲那个网页是哪个复制的xpath是没错的
如果第8行a的值是空list,那第9行的判断就走不进去,第10行没有运行。这种情况下,如果12行判断为真,14行的out就是未定义的变量。
可以在第8行前面加一下初始化:
a = list(set(txt))
out = []
if a:
out = [x.strip() for x in a if x.strip() !='']
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误提示是在你尝试使用一个没有定义的变量 out,建议在循环之前初始化 out 变量,如:
from lxml import etree
import requests
html = requests.get("https://www.peterx.cn/").content.decode()
hl = etree.HTML(html)
# 初始化 out 变量
out = []
for i in range(30):
txt = hl.xpath(f'//*[@id="content"]/div[18]/div[{i}]//text()')
url = hl.xpath(f'//*[@id="content"]/div[18]/div[{i}]//@href')
a = list(set(txt))
if a:
out += [x.strip() for x in a if x.strip() != ''] # 将结果拼接到 out 变量中
if url:
out += url # 将结果拼接到 out 变量中
print(out)
这样就可以避免该错误。