列出给定网站中的所有链接

时间:2014-07-14 14:56:44

标签: hyperlink web-scraping scrapy web-crawler

我需要一个关于列出网站中所有链接的最有效方法的建议。我能用php vb和我试图用scrapy做到这一点,但我的问题是,前两个输入网站的地址是不够的,我实际上要刮掉我的以下链接代码和scrapy我试图列出页面中的所有后续链接,但蜘蛛似乎永远不会结束研究。

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

有什么建议吗?

1 个答案:

答案 0 :(得分: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设置。

希望有所帮助。