我在尝试弄清楚为什么我的辅助功能无法跟踪新链接并输出数据时遇到了一些麻烦。 pythonpath
函数可以正常工作。当它回叫到parse
时,什么也没有发生。当我检查json输出时,发现parse_puppy
中的所有内容均已成功抓取,但puppy
中没有任何内容。
在第28行,如果我将方法更改为parse_puppy
,我会得到结果,但是大约是十二次相同的结果。
代码:
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'])
答案 0 :(得分:1)
该行应为
yield from response.follow_all(detail_page, callback=self.parse_puppy)