【问题标题】:Can I add links manually to LinkExtractor?我可以手动将链接添加到 LinkExtractor 吗?
【发布时间】:2016-08-05 17:14:32
【问题描述】:

LinkExtractor 似乎无法从函数内的 ajax 请求加载/生成的数据中提取链接 (see here)!

那么,有没有办法在函数中添加提取链接,然后手动添加到LinkExtractor,或者强制LinkExtractor抓取呢?

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    我不确定我在这里是否理解正确,但您似乎将LinkExtractorCrawlSpider.rules 混淆了。 LinkExtractor 只是一个从响应中提取链接的对象,其中 rules 属性描述了CrawlSpider 的爬取规则。

    如果您想在自己手动提取一些链接的同时使用 CrawlSpider,您可以这样做:

    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider
    class MySpider(CrawlSpider):
        name = 'myspider'
        le = LinkExtractor()
        rules = [Rule(le, callback='parse_page')...]
    
        def parse_page(self, response):
            items = #parse items
            for item in items:
                yield item
            ajax_url = #find ajax url for next page or something
            if ajax_url:
                yield Request(ajax_url, self.parse_ajax)
    
        def parse_ajax(self, response):
            links = self.le.extract_links(response)
            for link in links:
                yield Request(link.url, self.parse_page)
    

    【讨论】:

    • 文档不是说parse函数不能和​​CrawlSpider一起使用吗?我指的是CrawlSpider.rules中使用的LinkExtractor
    • 对,parse 是 CrawlSpider 的保留名称。我最初使用 scrapy.Spider 编写示例,只是忘记更改它。现在看我的编辑。关于链接提取器,这里有什么问题?您创建一个链接提取器并将其添加到您的规则中,稍后使用它来提取 parse_ajax() 中的一些链接 - 它是相同的链接提取器。
    • 不不,请see here 了解我的问题。我会试试你的代码。
    • 没错!那么我怎样才能得到这些链接呢?
    • @XO39 你需要手动处理它们。这正是我的回答所显示的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多