クローラーのアーキテクチャーの設計方法について混乱しています。
私は私が持っている検索を持っています
- ページネーション: 従うべき次のページのリンク
- 1 ページの製品リスト
- 説明を取得するためにクロールされる個々のリンク
次のコードがあります。
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)
問題は、2 つの return ステートメントがあることです。1 つは for request
、もう 1 つは ですyield
。
クロール スパイダーでは最後yield
のBaseSpider
.
私は何をすべきか?