gpt4 book ai didi

python - 使用 Scrapy 的 LinkExtractor

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:58 27 4
gpt4 key购买 nike

我正在尝试使用 Scrapy 从页面中提取所有链接,但我很难使用 LinkExtractor。我尝试了以下方法:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from Funda.items import FundaItem

class FundaSpider(scrapy.Spider):
name = "Funda"
allowed_domains = ["funda.nl"]
start_urls = [
"http://www.funda.nl/koop/amsterdam/"
]
rules = (
Rule(LinkExtractor(), callback='parse_item')
)

def parse_item(self, response):
filename = response.url.split("/")[-2] + '.html'
with open(filename, 'wb') as f:
f.write(response.body)

我的理解是,将 LinkExtractor() 作为 Rule 包含在内,应该使 response 仅包含链接。但是,如果我查看由此生成的 amsterdam.html 文件,它似乎仍然包含整个网页,而不仅仅是链接。

如何让响应只包含链接?

最佳答案

为什么您认为它只包含链接?

我认为您误解了 CrawlSpiderrule 参数。在 rule 中,您实际上指定了抓取逻辑而不是解析逻辑。正在指定 callback 的函数中处理解析。

因此,如果您想只保存响应中的链接,则必须先从响应中提取它们。您甚至可以使用相同的 LinkExtractor

class Spider(scrapy.Spider):
name = 'spider1'
le1 = LinkExtractor()
rules = (
Rule(le1, callback='parse_item')
)

def parse_item(self, response):
# this will give you Link objects
links = self.le1.extract_links(response)
# this will give you html nodes of <a>
links = response.xpath("//a").extract()

关于python - 使用 Scrapy 的 LinkExtractor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38346296/

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