[英]Is there an alternate way to run a scrapy spider?
以下代码采用 url,抓取其中的所有链接,然后验证这些链接。
runner = CrawlerRunner()
list = set([])
list_validate = set([])
list_final = set([])
class Crawler(CrawlSpider):
name = "Spider"
start_urls = ['https://example.com']
allowed_domains = ['example.com']
rules = [Rule(LinkExtractor(), callback='parse_links', follow=True)]
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
def parse_links(self, response):
base_url = url
href = response.xpath('//a/@href').getall()
list.add(urllib.parse.quote(response.url, safe=':/'))
for link in href:
if base_url not in link:
list.add(urllib.parse.quote(response.urljoin(link), safe=':/'))
for link in list:
if base_url in link:
list_validate.add(link)
def run_spider():
d = runner.crawl(Crawler)
def validate(d):
for link in list_validate:
error = http.request("GET", link)
if error.status == 200:
list_final.add(link)
for link in list_final:
print(link)
d.addCallback(validate)
reactor.run(0)
我想知道是否有另一种编写run_spider()
function 的方法。我想知道是否有可能在没有addCallback(validate)
的情况下实现相同的结果。 所以回顾一下,我想运行蜘蛛,然后将链接添加到列表,然后验证该列表。 验证 function 必须在蜘蛛完成后运行,以验证添加到列表中的链接。 那么有没有办法用不同的代码来实现这个结果呢?
您可以将协程 sytanx与 Twisted deferred 一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.