[英]Scrapy Crawler Doesn't Follow Links
我在試圖弄清楚為什么我的輔助 function 未能遵循新鏈接和 output 數據時遇到了一些麻煩。 parse
function 工作得很好。 當它回調parse_puppy
時,什么都沒有發生。 當我檢查 json output 時,我看到puppy
的所有內容都已成功抓取,但parse_puppy
沒有任何內容。
在第 28 行,如果我更改要follow
的方法,我會得到結果,但大約十幾次都是相同的結果。
代碼:
import scrapy
from scrapy.cmdline import execute
class Spider(scrapy.Spider):
name = "puppyDetails"
def start_requests(self):
urls = ['https://ws.petango.com/webservices/adoptablesearch/wsAdoptableAnimals.aspx?species=Dog&gender=A&agegroup=UnderYear&location=&site=&onhold=A&orderby=name&colnum=3&css=http://ws.petango.com/WebServices/adoptablesearch/css/styles.css&authkey=io53xfw8b0k2ocet3yb83666507n2168taf513lkxrqe681kf8&recAmount=&detailsInPopup=No&featuredPet=Include&stageID=&wmode=opaque']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
# GRAB ALL TOPICAL PUPPY DETAILS
for animal in response.css("div.list-animal-info-block"):
yield {
'puppy_name': animal.css('div.list-animal-name a::text').get(),
'puppy_id': animal.css('div.list-animal-id::text').get(),
'puppy_sex': animal.css('div.list-animal-sexSN::text').get(),
'puppy_breed': animal.css('div.list-animal-breed::text').get(),
'puppy_age': animal.css('div.list-animal-age::text').get(),
'puppy_link': animal.css('div.list-animal-name a::attr(href)').get()
}
# DIVE INTO DETAILS PAGE
detail_page = response.css('div.list-animal-name a::attr(href)').get()
self.logger.info('get puppy details')
# GO TO THE PUPPY DETAILS
yield response.follow_all(detail_page, callback=self.parse_puppy)
def parse_puppy(self, response):
# GRAB PUPPY DETAILS
for puppyDetails in response.xpath('//*[@class="detail-table"]//tr'):
yield {
'puppy_id': puppyDetails.xpath('//*[@id="lblID"]/text()').extract(),
'puppy_status': puppyDetails.xpath('//*[@id="lblStage"]/text()').extract(),
'puppy_intake_date': puppyDetails.xpath('//*[@id="lblIntakeDate"]/text()').extract()
}
execute(['scrapy','crawl','puppyDetails'])
錯誤:
ERROR: Spider must return Request, BaseItem, dict or None, got 'generator' in <GET https://ws.petango.com/webservices/adoptablesearch/wsAdoptableAnimals.aspx?species=Dog&gender=A&agegroup=UnderYear&location=&site=&onhold=A&orderby=name&colnum=3&css=http://ws.petango.com/WebServices/adoptablesearch/css/styles.css&authkey=io53xfw8b0k2ocet3yb83666507n2168taf513lkxrqe681kf8&recAmount=&detailsInPopup=No&featuredPet=Include&stageID=&wmode=opaque>
該行應該是
yield from response.follow_all(detail_page, callback=self.parse_puppy)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.