我正在使用scrapy來爬網。該網站每頁有15個列表,然後有一個下一個按鈕。我遇到了一個問題,在我完成解析管道中的所有列表之前,我正在調用請求下一個鏈接的請求。這裏是我的蜘蛛代碼:使用Python和Scrapy進行遞歸爬行
class MySpider(CrawlSpider):
name = 'mysite.com'
allowed_domains = ['mysite.com']
start_url = 'http://www.mysite.com/'
def start_requests(self):
return [Request(self.start_url, callback=self.parse_listings)]
def parse_listings(self, response):
hxs = HtmlXPathSelector(response)
listings = hxs.select('...')
for listing in listings:
il = MySiteLoader(selector=listing)
il.add_xpath('Title', '...')
il.add_xpath('Link', '...')
item = il.load_item()
listing_url = listing.select('...').extract()
if listing_url:
yield Request(urlparse.urljoin(response.url, listing_url[0]),
meta={'item': item},
callback=self.parse_listing_details)
next_page_url = hxs.select('descendant::div[@id="pagination"]/'
'div[@class="next-link"]/a/@href').extract()
if next_page_url:
yield Request(urlparse.urljoin(response.url, next_page_url[0]),
callback=self.parse_listings)
def parse_listing_details(self, response):
hxs = HtmlXPathSelector(response)
item = response.request.meta['item']
details = hxs.select('...')
il = MySiteLoader(selector=details, item=item)
il.add_xpath('Posted_on_Date', '...')
il.add_xpath('Description', '...')
return il.load_item()
這些行是問題所在。就像我之前說過的那樣,它們在蜘蛛完成抓取當前頁面之前正在執行。在網站的每個頁面上,這隻會導致我的列表中的3個被髮送到管道。
if next_page_url:
yield Request(urlparse.urljoin(response.url, next_page_url[0]),
callback=self.parse_listings)
這是我的第一隻蜘蛛,可能是我的設計缺陷,有沒有更好的方法來做到這一點?
喜放棄從網站多張下一頁。你有代碼工作嗎?我希望蜘蛛爬到下一頁,但似乎無法找到任何教程。你的工作代碼可能很有用。謝謝! – Victor 2011-03-31 14:15:59
不,我沒有。我甚至聯繫過scrapy的創作者,但他們沒有幫助。 – imns 2011-03-31 15:02:42
我只是用不同的關鍵字搜索,發現這個:http://abuhijleh.net/2011/02/13/guide-scrape-multi-pages-content-with-scrapy/我希望它有幫助。我還沒有編寫我自己的抓取工具。如果我做了什麼,我會發布一些東西。 – Victor 2011-04-01 03:23:35