【问题标题】:List all links present in a given website列出给定网站中存在的所有链接
【发布时间】:2014-07-14 14:56:44
【问题描述】:

我需要关于列出网站中所有链接的最有效方式的建议。我可以用任何一个 php vb 来做到这一点,并且我试图用 scrapy 来做,但我的问题是前 2 个输入网站的地址是不够的,我实际上必须在我的代码,并使用scrapy我试图列出页面中所有后续链接,但蜘蛛似乎永远不会结束研究。

换句话说,我需要找到一种输入网站地址的方法,返回该网站中存在的所有链接。我需要为一个学校项目做这件事,并且我正在考虑对零售业进行一项小型研究,因此我需要为给定的网站列出多达 20 000 个结果。

有什么建议吗?

【问题讨论】:

    标签: hyperlink web-scraping scrapy web-crawler


    【解决方案1】:

    Scrapy 是这里的完美选择。将CrawlSpiderLinkExtractor 一起使用。

    下面的蜘蛛会follow 并收集网站上的所有链接。由于默认启用了OffsiteMiddleware - 您不会从其他域获取链接。

    from scrapy.item import Field, Item
    from scrapy.contrib.spiders import CrawlSpider, Rule
    from scrapy.contrib.linkextractors import LinkExtractor
    
    
    class SampleItem(Item):
        link = Field()
    
    
    class SampleSpider(CrawlSpider):
        name = "sample_spider"
        allowed_domains = ["domain.com"]
        start_urls = ["http://domain.com"]
    
        rules = (
            Rule(LinkExtractor(), callback='parse_page', follow=True),
        )
    
        def parse_page(self, response):
            item = SampleItem()
            item['link'] = response.url
            return item
    

    如果你想限制链接数并在获得n个链接后停止蜘蛛,使用Close Spider扩展并设置CLOSESPIDER_ITEMCOUNT设置:

    CLOSESPIDER_ITEMCOUNT

    指定项目数量的整数。如果蜘蛛刮伤 如果项目和那些项目被项目传递,则超过该金额 管道,蜘蛛会关闭的原因 closespider_itemcount。如果为零(或未设置),蜘蛛将不会关闭 按通过的项目数。

    在您的情况下,您也可以改用CLOSESPIDER_PAGECOUNT 设置。

    希望对您有所帮助。

    【讨论】:

    • 非常感谢您的提示!! 2 进一步的问题:如果我需要列出仅包含某个字符串的页面,这可能吗?这样我就可以只列出产品页面而不是主页。是否可以一次在多个站点上执行它?
    • @markoc。是的,这是可能的。考虑提出一个单独的问题,以便更多人有机会帮助您。在这里也给我一个链接。如果以下主题已解决,请不要忘记接受答案。谢谢。
    • 非常感谢您的帮助。我将发布新问题。目前我尝试了您发布的scrapy spider,但出现错误“无法导出LinkExtractor”。任何的想法??我是一个真正的scrapy初学者,但它似乎足智多谋!再次感谢 - 这是我的新问题的链接:stackoverflow.com/questions/24788376/…
    • -> 一个相关问题:stackoverflow.com/questions/24805425/…。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多