1 回答
TA贡献1806条经验 获得超5个赞
现在,通过执行日志我可以告诉你蜘蛛中有两个问题,似乎都与start_urls.
第一个例外:
File "C:\Users\Jatencio\PycharmProjects\testy\testdigi\testdigi\spiders\digike.py", line 93, in parse
'Quantity': cleaned_quantity,
UnboundLocalError: local variable 'cleaned_quantity' referenced before assignment
您在定义它之前引用了它cleaned_quantity。问题在这里:
if p.css('td.tr-minQty.ptable-param span.desktop::text').get():
quantity = p.css('td.tr-minQty.ptable-param span.desktop::text').get()
quantity = quantity.strip()
cleaned_quantity = int(quantity.replace(',', ''))
else:
quantity = 'No quantity'
如果您的 if 语句解析为 false,则永远不会定义 cleaned_quantity,并且会在您尝试组装您的项目时引发错误:
yield {
'Part': parts1,
'Quantity': cleaned_quantity,
'Price': cleaned_price,
'Stock': cleaned_stock,
'Status': cleaned_status,
}
这只发生在几次迭代中,而不是全部。
第二个例外:
File "C:\Users\Jatencio\PycharmProjects\testy\testdigi\testdigi\spiders\digike.py", line 55, in parse
p.css('td.tr-mfgPartNumber span::text').remove()
[...]
File "c:\users\jatencio\pycharmprojects\testy\venv\lib\site-packages\parsel\selector.py", line 371, in remove
raise CannotRemoveElementWithoutRoot(
parsel.selector.CannotRemoveElementWithoutRoot: The node you're trying to remove has no root, are you trying to remove a pseudo-element? Try to use 'li' as a selector instead of 'li::text' or '//li' instead of '//li/text()', for example.
这里的问题是你.remove()在 parsel 调用伪元素的方法中使用方法,你只能用来从 HTML 树中删除实际元素,所以我相信这应该可以解决问题:
改变这个:
p.css('td.tr-mfgPartNumber span::text').remove()
对此:
p.css('td.tr-mfgPartNumber span').remove()
您使用该方法的所有行都是这种情况remove。
如果这解决了您的问题,请告诉我。
添加回答
举报