i scrapy auf einer Website mit verschachtelten Seiten üben, und ich brauche nur die innerste Seite Inhalte zu kratzen, aber gibt es eine Möglichkeit, die Daten aus der Parsing-Funktion zu tragen die analysieren innersten Seite, auf der Haupt Parse-Funktion, viele Parse-Funktionen Seiten zu öffnen, aber nur Elemente aus der letzten Parse-Funktion zu erhalten, und tragen über an der Haupt Parse FunktionPython Scrapy verschachtelte Seiten müssen nur Elemente aus innersten Seite
hier ist das, was ich versucht habe
try:
import scrapy
from urlparse import urljoin
except ImportError:
print "\nERROR IMPORTING THE NESSASARY LIBRARIES\n"
class CanadaSpider(scrapy.Spider):
name = 'CananaSpider'
start_urls = ['http://www.canada411.ca']
#PAGE 1 OF THE NESTED WEBSITE GETTING LINK AND JOING WITH THE MAIN LINK AND VISITING THE PAGE
def parse(self, response):
SET_SELECTOR = '.c411AlphaLinks.c411NoPrint ul li'
for PHONE in response.css(SET_SELECTOR):
selector = 'a ::attr(href)'
try:
momo = urljoin('http://www.canada411.ca', PHONE.css(selector).extract_first())
#PASSING A DICTIONARYAS THE ITEM
pre = {}
post = scrapy.Request(momo, callback=self.parse_pre1, meta={'item': pre})
yield pre
except:
pass
#PAGE 2 OF THE NESTED WEBSITE
def parse_pre1(self, response):
#RETURNING THE SAME ITEM
item = response.meta["item"]
SET_SELECTOR = '.clearfix.c411Column.c411Column3 ul li'
for PHONE in response.css(SET_SELECTOR):
selector = 'a ::attr(href)'
momo = urljoin('http://www.canada411.ca', PHONE.css(selector).extract_first())
pre = scrapy.Request(momo, callback=self.parse_pre1, meta={'page_2': item})
yield pre
def parse_info(self, response):
#HERE I AM SCRAPING THE DATA
item = response.meta["page_2"]
name = '.vcard__name'
address = '.c411Address.vcard__address'
ph = '.vcard.label'
item['name'] = response.css(name).extract_first()
item['address'] = response.css(address).extract_first()
item['phoneno'] = response.css(ph).extract_first()
return item
Ich erben den Artikel was mache ich falsch?
können Sie bitte etwas erarbeiten, ich bin hier –
Python sollte nicht Ihr Rückruf in 'parse_pre1 'function sollte sich auf' callback = self.parse_info' anstatt auf 'callback = self.parse_pre1' beziehen – JkShaw