我有一個關於如何在scrapy中執行此操作的問題。我有一隻蜘蛛抓取物品的頁面。 每次找到一個列表頁面時,都會有一個parse_item()回調函數,用於提取項目數據和產生項目。到目前爲止,一切都很好。Scrapy - 解析頁面以提取項目 - 然後關注並存儲項目URL內容
但是,每個項目都有其他數據,一個URL,有關該項目的更多詳細信息。我想跟隨該網址並在另一個項目字段(url_contents)中存儲該項目網址的獲取內容。
我不知道如何組織代碼來實現這一點,因爲兩個鏈接(列表鏈接和一個特定的項目鏈接)跟隨不同的方式,在不同的時間調用回調,但我必須關聯它們在相同的項目處理。
到目前爲止我的代碼看起來是這樣的:
class MySpider(CrawlSpider):
name = "example.com"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/?q=example",
]
rules = (
Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('item\/detail',)), follow = False),
)
def parse_item(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//h2[@class="title"]'
sub_selectors = main_selector.select(xpath)
for sel in sub_selectors:
item = ExampleItem()
l = ExampleLoader(item = item, selector = sel)
l.add_xpath('title', 'a[@title]/@title')
......
yield l.load_item()
我就是這麼做的。我認爲唯一的另一種選擇是在存儲/輸出階段重新組合數據。 – Acorn 2011-05-02 15:27:30
是的,我們對scrapy組也有確認,所以我選擇了我的答案 – StefanH 2011-05-02 21:36:51