Scrapy:为不同的URL调用不同的函数

时间:2018-03-04 15:30:31

标签: python-2.7 web-scraping callback scrapy response

我是scrapy的新手。我试图获得具有不同设计的不同页面的响应。

  

我提取了链接的名称和链接的地址。从那个我结合起来   提取的地址与原始链接是期望的   访问过网页。

     

我的代码:

导入scrapy

class JobCategorySpider(scrapy.Spider):
    name = 'job_category'
    allowed_domains = ['www.jobspider.com/job/',
                       'www.jobspider.com/job/browse-resumes.asp',
                       'www.jobspider.com/job/resume-search-results.asp/']

    start_urls = ['http://www.jobspider.com/job/browse-resumes.asp']

    def parse(self, response):
        table = response.xpath('//*[@face="Arial"]/a')
        raw_url = unicode('http://www.jobspider.com/job/')
        data = {}
        for entry in table:
            name = entry.xpath('.//text()').extract()
            address = entry.xpath('.//@href').extract()
            data[name[0]] = address[0]

        for key, value in data.iteritems():
            if key == "Human Resources":
                category_url = raw_url+value
                print category_url
                #print type(category_url)
                # Request(url=category_url, callback=self.Hr, meta={'data': data})

                yield scrapy.Request(category_url,callback = self.Hr(data=data) )

    def Hr(self, response, data):
        print response

1 个答案:

答案 0 :(得分:0)

据我了解你的问题,你正在尝试使用不同的回调(管道)。

您可以做的是覆盖start_requests并调用每个链接分类的不同回调。

例如,请参阅下面的代码。我重写了start_requests,我可以遍历start_urls。根据一些逻辑,我可以设置不同的回调。

from scrapy import Spider, Request

class JobCategorySpider(Spider):
    name = 'job_category'
    allowed_domains = ['www.jobspider.com/job/',
                       'www.jobspider.com/job/browse-resumes.asp',
                       'www.jobspider.com/job/resume-search-results.asp/']

    start_urls = ['http://www.jobspider.com/job/browse-resumes.asp']

    def start_requests(self):
        for url in self.start_urls:
            if url == "http://www.jobspider.com/job/browse-resumes.asp":
                yield Request(url, callback=self.parse_hr)
            else:
                yield Request(url, callback=self.parse_developer)

    def parse_hr(self, response):
        ....

    def parse_developer(self, response):
        ....