Xpath 如何使用LinkExtractor获取网站中的所有URL?
我想知道是否有一种方法可以获取整个网站中的所有URL。看来用CrawSpider和LinkedExtractor制作Scrapy是个不错的选择。考虑这个例子: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):
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能做到吗?是的。阅读我提供的链接和建议。项目管道可以将通过它的所有链接编译成一个列表。蜘蛛级别的列表也会起作用。有没有这两个选项不起作用的原因?