Sto usando Python e Scrapy per questa domanda.Come si usa Scrapy per eseguire la scansione all'interno delle pagine?
Sto tentando di strisciare pagina web A, che contiene un elenco di link a pagine web B1, B2, B3, ... Ogni B pagina contiene un link a un'altra pagina, C1, C2, C3, ..., che contiene un'immagine.
Quindi, utilizzando Scrapy, l'idea in pseudo-codice è:
links = getlinks(A)
for link in links:
B = getpage(link)
C = getpage(B)
image = getimage(C)
Tuttavia, io sono in esecuzione in un problema quando si cerca di analizzare più di una pagina in Scrapy. Ecco il mio codice:
def parse(self, response):
hxs = HtmlXPathSelector(response)
links = hxs.select('...')
items = []
for link in links:
item = CustomItem()
item['name'] = link.select('...')
# TODO: Somehow I need to go two pages deep and extract an image.
item['image'] = ....
Come potrei fare?
(Nota: La mia domanda è simile a Using multiple spiders at in the project in Scrapy ma sono sicuri di come valori "di ritorno" dagli oggetti richiesta Scrapy.)
Grazie, questo è fantastico. Se volessi creare il 'CustomItem' nel metodo' parse', lo passerei usando la meta proprietà? – sdasdadas
Inoltre, voglio restituire una lista di elementi ('items = []'). Come dovrei usare quanto sopra e poi, al suo completamento, aggiungere l'articolo alla lista? – sdasdadas
La funzione solo spider è di visitare una pagina, estrarre e restituire i dati (il 'item yield 'finale). Per aggregare i dati, come mettere tutti gli elementi in una lista, è necessario creare una funzione nel modulo 'pipelines' (questa è solo una convenzione). [Questo esempio di pipeline] (https://github.com/bcap/wikipedia-music/blob/master/crawler/crawler/pipelines.py) crea un file di punti basato su tutti i generi musicali che sono stati scansionati –