为什么 process_links 不返回指向 Rule() 的任何链接?
Why is process_links not returning any links to the Rule()?
我试着理解Scrapy中规则的“process_links”回调选项。
这里的 post 已经有所帮助,但并没有完全解决我的问题:
Example code for Scrapy process_links and process_request
我的目标:我需要删除 ?在 URL:
Rule(LinkExtractor(restrict_css='... CSS CODE ...'), process_links='delete_random_garbage_from_url', callback='parse_item', follow=True),
def delete_random_garbage_from_url(self, urls):
for url in urls:
print(url.url.split('?')[0])
url.url = url.url.split('?')[0]
打印工作正常,所以我打印了所有没有参数的网址。
但是for循环中的第二行抛出这个错误:
returns: TypeError: 'NoneType' 对象不可迭代
我错过了什么吗?感谢您的帮助。
我找到了解决方案。 yield link 丢失了。
因此,如果有人正在寻找一种在传递 URL 之前对其进行过滤的方法,请看这里:
Rule(LinkExtractor(restrict_css='WHAT ARE YOU LOOKING FOR'), process_links='delete_random_garbage_from_url', callback='parse_item', follow=True),
def delete_random_garbage_from_url(self, links):
for link in links:
link.url = link.url.split('?')[0] #do what you need to do, here remove everything from URL after the ?
yield link
感谢您的帮助@tomjn
我试着理解Scrapy中规则的“process_links”回调选项。
这里的 post 已经有所帮助,但并没有完全解决我的问题: Example code for Scrapy process_links and process_request
我的目标:我需要删除 ?在 URL:
Rule(LinkExtractor(restrict_css='... CSS CODE ...'), process_links='delete_random_garbage_from_url', callback='parse_item', follow=True),
def delete_random_garbage_from_url(self, urls):
for url in urls:
print(url.url.split('?')[0])
url.url = url.url.split('?')[0]
打印工作正常,所以我打印了所有没有参数的网址。 但是for循环中的第二行抛出这个错误:
returns: TypeError: 'NoneType' 对象不可迭代
我错过了什么吗?感谢您的帮助。
我找到了解决方案。 yield link 丢失了。 因此,如果有人正在寻找一种在传递 URL 之前对其进行过滤的方法,请看这里:
Rule(LinkExtractor(restrict_css='WHAT ARE YOU LOOKING FOR'), process_links='delete_random_garbage_from_url', callback='parse_item', follow=True),
def delete_random_garbage_from_url(self, links):
for link in links:
link.url = link.url.split('?')[0] #do what you need to do, here remove everything from URL after the ?
yield link
感谢您的帮助@tomjn