繁体   English   中英

有没有其他方法可以运行 scrapy 蜘蛛?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM