私はアムステルダムで販売されている家屋をリストアップしているウェブサイトhttp://www.funda.nl/koop/amsterdam/を掻き集めようとしています。メインページには多くのリンクがあり、そのうちのいくつかは個々の売り場へのリンクです。私は最終的にこれらのリンクをたどり、そこからデータを抽出したいと思います。ScrapyのLinkExtractorで "allow"キーワードを使用する
まず、個々の家屋に対応するリンクを一覧表示しようとしています。 URLに "huis-"と8桁のコード(たとえば、http://www.funda.nl/koop/amsterdam/huis-49801910-claus-van-amsbergstraat-86/)が含まれていることがわかりました。正規表現r'huis-\d{8}'
を使用して、このURLのサブセットと一致させたいと思います。
私はScrapyのLinkExtractor
を使用しようとしていますが、動作していないようです。次のように私が書いたクモは、次のとおりです。メインのプロジェクトディレクトリで
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
私はscrapy crawl Funda -o funda.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桁のコードのないリンクがいくつか含まれています。これをフィルタリングして、家への「本物の」リンクだけにすることはできますか?