Ich versuche, einen Code zu schreiben, um die Website eines britischen Hausbauers zu verschrotten, um eine Liste von Häusern zum Verkauf aufzunehmen.Scrapy Python-Code zur Liste der URLs scheint nicht zu funktionieren, wie erhofft
Ich beginne auf der Seite http://www.persimmonhomes.com/sitemap und ich habe einen Teil des Codes geschrieben alle Entwicklungen die URLs der Housebuilder aufzulisten und dann der zweite Teil des Codes von jedem der Urls Schrottpreise aufzeichnen usw.
Ich weiß, dass der zweite Teil funktioniert und ich weiß, dass der erste Teil alle URLs auflistet. Aber aus irgendeinem Grund scheinen die im ersten Teil aufgeführten URLs den zweiten Teil des Codes nicht auszulösen.
Der Code dieses ersten Teils ist:
def parse(self, response):
for href in response.xpath('//*[@class="contacts-item"]/ul/li/a/@href'):
url = urlparse.urljoin('http://www.persimmonhomes.com/',href.extract())
yield scrapy.Request(url, callback=self.parse_dir_contents)
Nun, ich weiß, das die URLs auflistet ich will (wenn ich in der Zeile „URL print“ setzen dann alles, was sie aufgelistet zu bekommen), und ich kann manuell Liste fügen Sie sie dem Code hinzu, um den zweiten Teil zu laufen, alles ok, wenn ich wollte. Obwohl die URLs erstellt werden, scheinen sie den zweiten Teil des Codes nicht zu verwerfen.
und der gesamte Code ist unten:
import scrapy
import urlparse
from Persimmon.items import PersimmonItem
class persimmonSpider(scrapy.Spider):
name = "persimmon"
allowed_domains = ["http://www.persimmonhomes.com/"]
start_urls = [
"http://www.persimmonhomes.com/sitemap",
]
def parse(self, response):
for href in response.xpath('//*[@class="contacts-item"]/ul/li/a/@href'):
url = urlparse.urljoin('http://www.persimmonhomes.com/',href.extract())
yield scrapy.Request(url, callback=self.parse_dir_contents)
def parse_dir_contents(self, response):
for sel in response.xpath('//*[@id="aspnetForm"]/div[4]'):
item = PersimmonItem()
item['name'] = sel.xpath('//*[@id="aspnetForm"]/div[4]/div[1]/div[1]/div/div[2]/span/text()').extract()
item['address'] = sel.xpath('//*[@id="XplodePage_ctl12_dsDetailsSnippet_pDetailsContainer"]/div/*[@itemprop="postalCode"]/text()').extract()
plotnames = sel.xpath('//div[@class="housetype js-filter-housetype"]/div[@class="housetype__col-2"]/div[@class="housetype__plots"]/div[not(contains(@data-status,"Sold"))]/div[@class="plot__name"]/a/text()').extract()
plotnames = [plotname.strip() for plotname in plotnames]
plotids = sel.xpath('//div[@class="housetype js-filter-housetype"]/div[@class="housetype__col-2"]/div[@class="housetype__plots"]/div[not(contains(@data-status,"Sold"))]/div[@class="plot__name"]/a/@href').extract()
plotids = [plotid.strip() for plotid in plotids]
plotprices = sel.xpath('//div[@class="housetype js-filter-housetype"]/div[@class="housetype__col-2"]/div[@class="housetype__plots"]/div[not(contains(@data-status,"Sold"))]/div[@class="plot__price"]/text()').extract()
plotprices = [plotprice.strip() for plotprice in plotprices]
result = zip(plotnames, plotids, plotprices)
for plotname, plotid, plotprices in result:
item['plotname'] = plotname
item['plotid'] = plotid
item['plotprice'] = plotprice
yield item
keine Ansichten, warum der erste Teil des Codes die URLs erzeugt, aber der zweite Teil nicht durchschleift sie?
danke - das hat perfekt funktioniert – nevster