2012-02-17 16 views
27

nie mam konkretnego problemu kodu po prostu nie wiem, jak zbliżyć się do następującego problemu logistycznie z ramami Scrapy:Scrapy: Śledź link, aby uzyskać dodatkowe dane przedmiotu?

Struktura danych chcę zeskrobać jest zazwyczaj wiersz tabeli dla każdej pozycji . Wystarczy wystarczająco, prawda?

Docelowo chcę zeskrobać Tytuł, odejdą i Szczegóły dla każdego wiersza. Tytuł i odejdą są natychmiast dostępne na stronie ...

ALE Szczegóły sami nie są w tabeli - ale raczej, link do strony zawierającej dane (jeśli nie robi „t sensu oto tabela):

|-------------------------------------------------| 
|    Title    | Due Date | 
|-------------------------------------------------| 
| Job Title (Clickable Link)  | 1/1/2012 | 
| Other Job (Link)    | 3/2/2012 | 
|--------------------------------|----------------| 

Obawiam się, że nadal nie wiem jak to logistycznie przekazać przedmiot wokół z wywołań zwrotnych i wniosków, nawet po przeczytaniu przez CrawlSpider części Scrapy dokumentacja.

Odpowiedz

24

Najpierw przeczytaj docs, aby zrozumieć, co mówię.

Odpowiedź:

zeskrobać dodatkowe pola, które są na innych stronach, w ekstrakcie URL metody parse strony z dodatkową informacją, tworzenie i powrócić z tej metody analizowania obiektu Request z tego adresu URL i już przechodzić wyodrębnione dane za pomocą parametru meta.

how do i merge results from target page to current page in scrapy?

+0

Czy istnieje podstawowy przykładowy kod gdzieś? – fortuneRice

+0

@fortuneRice, nie wiesz, czy przykłady są aktualne: http://stackoverflow.com/questions/11150053 http://stackoverflow.com/questions/13910357/how-can-i-use-multiple-requests-and -pass-items-in-between-them-in-scrapy-python/13911764 # 13911764 – warvariuc

+0

jest to odpowiednia część dokumentacji: http://doc.scrapy.org/en/latest/topics/spiders.html – tback

1

Można również użyć Python functools.partial zdać item lub jakiekolwiek inne dane SERIALIZABLE poprzez dodatkowe argumenty do następnego Scrapy zwrotnego.

Coś jak:

import functools 

# Inside your Spider class: 

def parse(self, response): 
    # ... 
    # Process the first response here, populate item and next_url. 
    # ... 
    callback = functools.partial(self.parse_next, item, someotherarg) 
    return Request(next_url, callback=callback) 

def parse_next(self, item, someotherarg, response): 
    # ... 
    # Process the second response here. 
    # ... 
    return item 
14

przykład z scrapy documentation

def parse_page1(self, response): 
    item = MyItem() 
    item['main_url'] = response.url 
    request = scrapy.Request("http://www.example.com/some_page.html", 
        callback=self.parse_page2) 
    request.meta['item'] = item 
    return request 

def parse_page2(self, response): 
    item = response.meta['item'] 
    item['other_url'] = response.url 
    return item 
Powiązane problemy