Scrapy无法使用itemloader刮取第二页

时间:2015-07-28 05:20:11

标签: python-2.7 scrapy scrapy-spider

更新:7月29日,9:29 pm:阅读this post后,我更新了我的代码。

更新:2015年7月28日下午7:35,按照Martin的建议,消息发生了变化,但仍未列出任何项目或写入数据库。

ORIGINAL:我可以成功抓取一个页面(基页)。现在我试图从" base"中发现的另一个url中抓取其中一个项目。页面,使用请求和回调命令。但它不起作用。蜘蛛在这里:

from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy import Request
import re
from datetime import datetime, timedelta
from CAPjobs.items import CAPjobsItem 
from CAPjobs.items import CAPjobsItemLoader
from scrapy.contrib.loader.processor import MapCompose, Join

class CAPjobSpider(Spider):
    name = "naturejob3"
    download_delay = 2
    #allowed_domains = ["nature.com/naturejobs/"]
    start_urls = [
    "http://www.nature.com/naturejobs/science/jobs?utf8=%E2%9C%93&q=pathologist&where=&commit=Find+Jobs"]

    def parse_subpage(self, response):
        il = response.meta['il']
        il.add_xpath('loc_pj', '//div[@id="extranav"]/div/dl/dd[2]/ul/li/text()')  
        yield il.load_item()

    def parse(self, response):
        hxs = Selector(response)
        sites = hxs.xpath('//div[@class="job-details"]')    

        for site in sites:

            il = CAPjobsItemLoader(CAPjobsItem(), selector = site) 
            il.add_xpath('title', 'h3/a/text()')
            il.add_xpath('post_date', 'normalize-space(ul/li[@class="when"]/text())')
            il.add_xpath('web_url', 'concat("http://www.nature.com", h3/a/@href)')
            url = il.get_output_value('web_url')
            yield Request(url, meta={'il': il}, callback=self.parse_subpage)

现在抓取部分正常运行,但没有loc_pj项:( 7月29日下午7:35更新)

2015-07-29 21:28:24 [scrapy] DEBUG: Scraped from <200 http://www.nature.com/naturejobs/science/jobs/535683-assistant-associate-full-hs-clinical-clin-x-anatomic-pathology-cytopathology-11-000>
{'post_date': u'21 days ago',
'title': u'Assistant, Associate, Full (HS Clinical, Clin X) - Anatomic Pathology/Cytopathology (11-000)',
'web_url': u'http://www.nature.com/naturejobs/science/jobs/535683-assistant-associate-full-hs-clinical-clin-x-anatomic-pathology-cytopathology-11-000'}

1 个答案:

答案 0 :(得分:1)

您可以像这样初始化ItemLoader

il = CAPjobsItemLoader(CAPjobsItem, sites)

documentation中,它是这样完成的:

l = ItemLoader(item=Product(), response=response)

所以我认为你在CAPjobsItem错过了括号,你的行应该是:

il = CAPjobsItemLoader(CAPjobsItem(), sites)