gpt4 book ai didi

python - 在Scrapy的LinkExtractor中使用 "allow"关键字

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:06 24 4
gpt4 key购买 nike

我正在尝试抓取网站http://www.funda.nl/koop/amsterdam/ ,其中列出了阿姆斯特丹待售房屋。主页包含许多链接,其中一些是指向单个待售房屋的链接。我最终想点击这些链接并从中提取数据。

首先,我尝试简单地列出与各个房屋相对应的链接。我注意到他们的 URL 包含“huis-”后跟一个 8 位代码 - 例如 http://www.funda.nl/koop/amsterdam/huis-49801910-claus-van-amsbergstraat-86/ 。我想使用正则表达式 r'huis-\d{8}' 来匹配该网址子集。

我正在尝试使用 Scrapy 的 LinkExtractor 来执行此操作,但它似乎不起作用。我写的spider如下:

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

class FundaSpider(CrawlSpider):
name = "Funda"
allowed_domains = ["funda.nl"]
start_urls = ["http://www.funda.nl/koop/amsterdam/"]

le1 = LinkExtractor()
rules = (
Rule(LinkExtractor(allow=r'huis-\d{8}'), callback='parse_item'),
)

def parse_item(self, response):
links = self.le1.extract_links(response)
for link in links:
item = FundaItem()
item['url'] = link.url
print("The item is "+str(item))
yield item

在主项目目录中,如果我运行 scrapycrawl Funda -ofunda.json,则生成的 funda.json 文件以以下行开头:

[
{"url": "http://www.funda.nl/cookiebeleid/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49728947-emmy-andriessestraat-374/ufsavqdqfvxyerrvff.html"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49728947-emmy-andriessestraat-374/"},
{"url": "http://www.funda.nl/koop/"},
{"url": "https://www.funda.nl/mijn/login/?ReturnUrl=%2Fkoop%2Famsterdam%2Fhuis-49728947-emmy-andriessestraat-374%2F"},
{"url": "https://www.funda.nl/mijn/aanmelden/?ReturnUrl=%2Fkoop%2Famsterdam%2Fhuis-49728947-emmy-andriessestraat-374%2F"},
{"url": "http://www.funda.nl/language/switchlanguage/?language=en&returnUrl=%2Fkoop%2Famsterdam%2Fhuis-49728947-emmy-andriessestraat-374%2F"},
{"url": "https://help.funda.nl/hc/nl/categories/200207038"},
{"url": "http://www.funda.nl/koop/amsterdam/"},

如您所见,它包含多行链接,其中不包含“huis-”或 8 位代码。我如何才能将其过滤为仅指向房屋的“真实”链接?

最佳答案

问题在于正则表达式位于 rules 参数的定义中,但不在 le1 的定义中。将其添加到 le1 的定义中可以得到预期的输出。

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

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