Wenn meine Spinne läuft auf einer URL wie this:Warum wiederholen sich einige Werte der Felder in dieser Scrapy-Spinne?
def parse_subandtaxonomy(self, response):
item = response.meta['item']
for sub in response.xpath('//div[@class = "page-content"]/section'):
item['Subcategory'] = sub.xpath('h2/text()').extract()
for tax in sub.xpath('ul/li/a'):
item['Taxonomy'] = tax.xpath('text()').extract()
for href in tax.xpath('@href'):
# url = response.urljoin(href.extract()) - > this gave me 301 redirects
badurl = urljoin('https://211sepa.org/search/', href.extract())
url = badurl.replace('search?', 'search/?area_served=Philadelphia&', 1) # shut off to test multi-page
request = scrapy.Request(url, callback=self.parse_listings)
request.meta['item'] = item
yield item
Ich erhalte diese Ausgabe, das ist, was ich erwarten:
{"Category": ["Housing"], "Subcategory": ["Affordable Housing"], "Taxonomy": ["Section 8 Vouchers"]}
{"Category": ["Housing"], "Subcategory": ["Affordable Housing"], "Taxonomy": ["Public Housing"]}
{"Category": ["Housing"], "Subcategory": ["Affordable Housing"], "Taxonomy": ["Low Income/ Subsidized Rental Housing"]}
{"Category": ["Housing"], "Subcategory": ["Shelter"], "Taxonomy": ["Homeless Shelters"]}
{"Category": ["Housing"], "Subcategory": ["Shelter"], "Taxonomy": ["Homeless Shelter Centralized Intake"]}
{"Category": ["Housing"], "Subcategory": ["Shelter"], "Taxonomy": ["Domestic Violence Shelters"]}
{"Category": ["Housing"], "Subcategory": ["Shelter"], "Taxonomy": ["Runaway/ Youth Shelters"]}
{"Category": ["Housing"], "Subcategory": ["Shelter"], "Taxonomy": ["Cold Weather Shelters/ Warming Centers"]}
{"Category": ["Housing"], "Subcategory": ["Shelter"], "Taxonomy": ["Homeless Shelter for Pregnant Women"]}
{"Category": ["Housing"], "Subcategory": ["Stay Housed"], "Taxonomy": ["Rent Payment Assistance"]}
{"Category": ["Housing"], "Subcategory": ["Stay Housed"], "Taxonomy": ["Mortgage Payment Assistance"]}
{"Category": ["Housing"], "Subcategory": ["Stay Housed"], "Taxonomy": ["Landlord/ Tenant Mediation"]}
{"Category": ["Housing"], "Subcategory": ["Stay Housed"], "Taxonomy": ["General Dispute Mediation"]}
{"Category": ["Housing"], "Subcategory": ["Overcome Homelessness"], "Taxonomy": ["Transitional Housing/ Shelter"]}
{"Category": ["Housing"], "Subcategory": ["Overcome Homelessness"], "Taxonomy": ["Rental Deposit Assistance"]}
{"Category": ["Housing"], "Subcategory": ["Overcome Homelessness"], "Taxonomy": ["Permanent Supportive Housing"]}
aber dann, wenn ich yield item
-yield request
in der weiterhin auf ändern crawl, hat jeder Artikel {"Category": ["Housing"], "Subcategory": ["Overcome Homelessness"], "Taxonomy": ["Permanent Supportive Housing"] ... other item info ... }
anstelle seiner jeweiligen Unterkategorie und Taxonomie. Jedes Element, das ich schließlich von jeder Taxonomie möchte, ist abgekratzt, aber es ist falsch beschriftet, wie oben beschrieben. Irgendeine Idee was ist los?
Dies tat es und macht Sinn, danke. Auch neugierig, warum Sie 'item = response.meta ['item']. Copy()' statt nur 'item = response.meta ['item']' –
@g_raham verwendet, um ein neues, sauberes Objekt für jedes Element zu erstellen Schleifenzyklus, um die Datenspeicherung von vorherigen Schleifenzyklen zu verhindern. Scrapy Item ist so ziemlich ein Python-Wörterbuch und Sie können tatsächlich ein Python-Wörterbuch anstelle von Item verwenden. – Granitosaurus