2016-07-13 5 views
1

私はアムステルダムで販売されている家屋をリストアップしているウェブサイト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桁のコードのないリンクがいくつか含まれています。これをフィルタリングして、家への「本物の」リンクだけにすることはできますか?

答えて

1

正規表現がrulesパラメータの定義にありましたが、定義がle1ではないという問題がありました。 le1の定義に追加すると、期待通りの出力が得られました。

関連する問題