我是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
答案 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):
....