Я пытаюсь просканировать сайт http://www.funda.nl/koop/amsterdam/, в котором перечислены дома для продажи в Амстердаме, и извлеките данные из подстраниц, таких как http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/ для индивидуальных домов. В качестве первого шага я хотел бы сначала получить список всех этих подстраниц. До сих пор у меня есть следующий паук:Извлеките только подстраницы с помощью LinkExtractor Scrapy.
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(allow=r'%s+huis-\d{8}' % start_urls[0], allow_domains='funda.nl')
rules = (
Rule(le1, 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
Если я запускаю этот вывод генерирующего JSON как scrapy crawl Funda -o funda.json
, то в результате funda.json
выглядит следующим образом (первые несколько только строка):
[
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/ywavcsbywacbcasxcxq.html"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/print/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/reageer/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/bezichtiging/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/brochure/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/doorsturen/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/meld-een-fout/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/ywavcsbywacbcasxcxq.html"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/print/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/reageer/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/bezichtiging/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/brochure/download/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/doorsturen/"},
{"url": "http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/meld-een-fout/"},
В дополнении к нужным подстраницам http://www.funda.nl/koop/amsterdam/huis-49801360-brede-vogelstraat-2/
и http://www.funda.nl/koop/amsterdam/huis-49800159-breezandpad-8/
, есть также много «под-подстраниц», которые я не собирался выбирать. Как я могу выбрать только подстраницы?