1
我對如何設計爬蟲的體系結構感到困惑。使用BaseSpider寫一個爬蟲來解析scrapy中的一個站點
我有,我有
- 分頁搜索:下一個頁面的鏈接跟隨
- 的產品之一頁
- 各個環節上的列表中被抓取,以獲得描述
我有以下代碼:
def parse_page(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//ol[@id=\'result-set\']/li')
items = []
for site in sites[:2]:
item = MyProduct()
item['product'] = myfilter(site.select('h2/a').select("string()").extract())
item['product_link'] = myfilter(site.select('dd[2]/').select("string()").extract())
if item['profile_link']:
request = Request(urljoin('http://www.example.com', item['product_link']),
callback = self.parseItemDescription)
request.meta['item'] = item
return request
soup = BeautifulSoup(response.body)
mylinks= soup.find_all("a", text="Next")
nextlink = mylinks[0].get('href')
yield Request(urljoin(response.url, nextlink), callback=self.parse_page)
問題是我有兩個返回語句:一個用於request
,另一個用於yield
。
在抓取蜘蛛,我不需要使用最後yield
,所以一切工作正常,但在BaseSpider
我不得不手動跟蹤鏈接。
我該怎麼辦?
我不明白這個問題。如果事情使用CrawlSpider工作,爲什麼你要使用BaseSpider? – Talvalin
我坦率地說,我想使用BaseSpider,以便我編碼大部分的東西。 crawlspider會自動執行任何操作,並且在Spider基礎中,我會編寫代碼。只要你在這裏,它就很有趣。所以QUESTION是這個代碼的作品,當我從上面刪除'返回請求'行。我想知道如果我刪除返回語句,我的項目將通過管道保存 – user1858027