gpt4 book ai didi

xpath - 如何使用LinkExtractor来获取网站中的所有URL?

转载 作者:行者123 更新时间:2023-12-03 16:10:03 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以获取整个网站中的所有网址。似乎使用CrawSpider和LinkExtractor的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


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

最佳答案

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

但是,不能保证您将捕获该域的所有页面,我认为请参阅How to get all webpages on a domain以获得对该问题的全面概述。

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)

关于xpath - 如何使用LinkExtractor来获取网站中的所有URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com