【问题标题】:scrapy: request url must be str or unicode got listscrapy:请求 url 必须是 str 或 unicode got list
【发布时间】:2014-07-23 18:56:28
【问题描述】:

我无法弄清楚这段代码有什么问题。我想抓取第一页,然后,对于该页面上的每个链接,转到第二页以提取项目描述。当我运行下面的代码时,我得到:exception.TypeError: url must be str or unicode, got list。这是我的代码:

from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy.item import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import MapCompose,  Join
from scrapy.contrib.loader import XPathItemLoader
from my.items import myItem

class mySpider(Spider):
    name = "my"
    allowed_domains = ["my.com"]
    start_urls = ['http://sjg.my.com/cf_jy.cfm']

    def parse(self, response):
        s = Selector(response)
        rows = s.xpath('//table[@class="table-order"]//tr')
        for row in rows:
            l = XPathItemLoader(item=myItem(), selector=row)
            l.default_input_processor = MapCompose(unicode.strip)
            l.default_output_processor = Join()
            l.add_xpath('title', './/a[contains(@href,"cf_jy.cfm?hu_pg")]/text()')
            l.add_xpath('url1', './/a/@href')
            l.add_xpath('dates', './/td[4]/text()')
            l.add_xpath('rev', './/td[@align="right"]/text()')
            l.add_xpath('typ', './/td[3]/text()')
            l.add_value('name', u'gsf')
            request = Request(l.get_xpath('.//a/@href'), callback=self.parse_link,meta={'l':l})
            yield request      

    def parse_link(self, response):
        l = response.meta["l"]
        s = Selector(response)
        q = s.xpath("//div[@class='content-main']/td[@class='text']/p/text()").extract()
        l.add_value('description',q)
        yield l.load_item()

提前致谢。

【问题讨论】:

  • 你能添加完整的回溯吗?
  • print l.get_xpath('.//a/@href') 看看你得到了什么。
  • 你是如何解决这个问题的?喜欢获取字符串吗?

标签: python unicode scrapy typeerror


【解决方案1】:

根据 Scrapy Request 的第一个参数采用字符串。但是在您的代码中,l.get_xpath('.//a/@href') 正在返回一个列表。所以尝试只发送字符串到请求的url

例如:

Request("Some_link_goes_here", callback=self.parse_link,meta={'l':l})

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多