Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 如何使用LinkExtractor获取网站中的所有URL?_Xpath_Scrapy - Fatal编程技术网

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

Xpath 如何使用LinkExtractor获取网站中的所有URL?,xpath,scrapy,Xpath,Scrapy,我想知道是否有一种方法可以获取整个网站中的所有URL。看来用CrawSpider和LinkedExtractor制作Scrapy是个不错的选择。考虑这个例子: from scrapy.item import Field, Item from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.contrib.linkextractors import LinkExtractor class SampleItem(Item):

我想知道是否有一种方法可以获取整个网站中的所有URL。看来用CrawSpider和LinkedExtractor制作Scrapy是个不错的选择。考虑这个例子:

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
这只蜘蛛没有给我想要的。它只给我一个网页上的所有链接,即开始的url。但是我想要的是这个网站的每个链接,包括那些不在起始url上的链接。我是否正确理解了这个例子?有办法解决我的问题吗?非常感谢

通过一个文件导出每个项目。这将导致在网站上找到的所有链接的列表

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


另一种选择是创建一个爬行器级别的列表,将每个URL附加到该列表中,而不使用任何项。如何继续将取决于您需要从spider获得什么,以及您打算如何使用它。

您可以创建一个spider,收集页面中的所有链接,然后针对每个链接检查域:如果相同,解析这些链接,冲洗,重复

但是,不能保证你能抓到上述领域的所有页面,请参阅,以获取我对该问题的良好概述

class SampleSpider(scrapy.Spider):
name = "sample_spider"
allowed_domains = ["domain.com"]
start_urls = ["http://domain.com"]


def parse(self, response):
    hxs = HtmlXPathSelector(response)

    urls = hxs.select('//a/@href').extract()

    # make sure the parsed url is the domain related.
    for u in urls:
        # print('response url:{} | link url: {}'.format(response.url, u))
        if urlsplit(u).netloc == urlsplit(response.url).netloc:
            yield scrapy.Request(u, self.parse)

谢谢你的回答,被拒绝了。但我不确定我的问题是否足够清楚。事实上,导出URL不是问题。问题是,上面的示例只提供了开始url网页上的所有url,如[link](,或),但我需要的是整个网站中的所有url,包括无法从开始url页面直接访问的url,如。Scrapy能做到吗?是的。阅读我提供的链接和建议。项目管道可以将通过它的所有链接编译成一个列表。蜘蛛级别的列表也会起作用。有没有这两个选项不起作用的原因?