2012-02-17 33 views
27

Tôi không có vấn đề về mã cụ thể Tôi chỉ không chắc chắn cách tiếp cận vấn đề sau đây với khung làm việc Scrapy:Phế liệu: Theo liên kết để nhận dữ liệu Mặt hàng bổ sung?

Cấu trúc dữ liệu tôi muốn xóa thường là hàng bảng cho mỗi mục . Đủ đơn giản, đúng không?

Cuối cùng tôi muốn cạo Tiêu đề, Due DateChi tiết cho mỗi hàng. Tiêu đềDue Date có sẵn ngay trên trang ...

NHƯNG Chi tiết mình đang không ở trong bảng - nhưng đúng hơn, một liên kết đến trang chứa các chi tiết (nếu điều đó không 't có ý nghĩa đây là một bảng):

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

tôi sợ rằng tôi vẫn không biết làm thế nào để vượt qua hậu cần mục xung quanh với callbacks và yêu cầu, ngay cả sau khi đọc qua CrawlSpider phần của Scrapy tài liệu.

Trả lời

24

Vui lòng đọc đầu tiên docs để hiểu tôi nói gì.

Câu trả lời:

Để cạo trường bổ sung mà là trên các trang khác, trong một URL trích phương pháp phân tích của trang thông tin bổ sung, tạo và trở về từ phương pháp phân tích cú pháp một đối tượng Request với URL đó và vượt qua đã trích xuất dữ liệu thông qua tham số meta.

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

+0

Có một mã số ví dụ cơ bản ở đâu? – fortuneRice

+0

@fortuneRice, không chắc chắn nếu các ví dụ được cập nhật: 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

đây là phần liên quan của tài liệu: http://doc.scrapy.org/en/latest/topics/spiders.html – tback

1

Bạn cũng có thể sử dụng Python functools.partial để vượt qua một item hoặc bất kỳ dữ liệu serializable khác thông qua đối số bổ sung cho Scrapy gọi lại sau.

Cái gì như:

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

Một ví dụ từ 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 
Các vấn đề liên quan