Scrapy Crawler不遵循链接

时间:2020-04-15 22:30:57

标签: python html scrapy

我在尝试弄清楚为什么我的辅助功能无法跟踪新链接并输出数据时遇到了一些麻烦。 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'])

1 个答案:

答案 0 :(得分:1)

该行应为

yield from response.follow_all(detail_page, callback=self.parse_puppy)
相关问题