Python 2.7 Scrapy无法使用itemloader刮取第二页

Python 2.7 Scrapy无法使用itemloader刮取第二页,python-2.7,scrapy,scrapy-spider,Python 2.7,Scrapy,Scrapy Spider,更新:7/29,9:29:阅读后,我更新了我的代码 更新:2015年7月28日,晚上7:35,根据Martin的建议,消息发生了变化,但仍然没有项目列表或写入数据库 原创:我可以成功地刮取一个页面(基本页面)。现在,我尝试使用Request和callback命令从“base”页面中找到的另一个url中刮取一个项目。但它不起作用。蜘蛛在这里: from scrapy.spider import Spider from scrapy.selector import Selector from scr

更新:7/29,9:29:阅读后,我更新了我的代码

更新:2015年7月28日,晚上7:35,根据Martin的建议,消息发生了变化,但仍然没有项目列表或写入数据库

原创:我可以成功地刮取一个页面(基本页面)。现在,我尝试使用Request和callback命令从“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]调试:从
{'post_date':你'21天前',
“职务”:u”助理,助理,全职(HS临床,临床X)-解剖病理学/细胞病理学(11-000),
“web\u url”:u”http://www.nature.com/naturejobs/science/jobs/535683-assistant-associate-full-hs-clinical-clin-x-anatomic-pathology-cytopathology-11-000'}

初始化
项目加载器
如下:

il = CAPjobsItemLoader(CAPjobsItem, sites)
在这种情况下,是这样做的:

l = ItemLoader(item=Product(), response=response)
因此,我认为您缺少
CAPjobsItem
中的括号,您的行应该是:

il = CAPjobsItemLoader(CAPjobsItem(), sites)

回家后我会试试的。感谢更改为
CAPjobsItem()
后,消息(没有相同的“错误”)更改为不同的内容(由于注释长度的限制,请参见上面的更新)。但我没有列出项目。请从allowed_domains语句中删除路径。长话短说:在我删除
允许的\u域
后,刮取部分工作正常,但是
loc\u pj
项没有显示在列表中。(请参阅上面更新的代码和日志消息)非常感谢!在修复了
loc_pj
的xpath并将
add_xpath
作为
location=response.xpath('//div[@id=“extranav”]//ul[@class=“job addresses”]/li/text()).extract()il.add_value('loc_pj',location)
(尽管我不知道它为什么工作),问题已经解决。代码也已更新。谢谢!我仍然不明白为什么在
parse_子页面中
il.add_xpath
不起作用。我必须创建一个
location
变量,首先使用
xpath().extract()
,然后使用
il.add\u value
。只是好奇。@LeamAWK嘿,先生,你也能回答我的问题吗?我已经用一个解决方案来代替你的问题了。请找到并将其作为自己的答案发布。
il = CAPjobsItemLoader(CAPjobsItem(), sites)