如何使用LinkExtractor获取网站中的所有网址?

时间:2015-10-28 04:43:28

标签: xpath scrapy

我想知道是否有办法在整个网站上获取所有网址。似乎Scrapy with CrawSpider和LinkExtractor是一个不错的选择。考虑这个例子:

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

这只蜘蛛没有给我我想要的东西。它只给我一个网页上的所有链接,即start_url。但我想要的是这个网站上的每个链接,包括那些不在起始网址上的链接。我是否正确理解了这个例子?我的问题有解决方案吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

通过Feed Export导出每个项目。这将生成网站上找到的所有链接的列表。

或者,编写自己的Item Pipeline以将所有链接导出到文件,数据库或您选择的任何内容。

另一种选择是创建一个蜘蛛级别列表,您可以将每个URL附加到该列表,而不是使用任何项目。你如何进行将真正取决于你需要蜘蛛,以及你打算如何使用它。

答案 1 :(得分:1)

你可以创建一个蜘蛛,收集页面中的所有链接,然后为每个链接,检查域名:如果它是相同的,解析这些链接,冲洗,重复。

我们无法保证您能够抓住所述域名的所有网页,请参阅How to get all webpages on a domain,以便在我看来对该问题进行了详细了解。

select * into NewTable