2014-07-23 21 views
1

我無法完全弄清楚這段代碼有什麼問題。我想刮第一頁,然後,對於該頁面上的每個鏈接,轉到第二頁以提取項目描述。當我運行下面的代碼時,我得到:exception.TypeError:url必須是str或unicode,得到列表。這裏是我的代碼:scrapy:請求url必須是str或unicode得到列表

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() 

在此先感謝。

+0

您可以添加完整的追蹤? – Jahaja

+0

'print l.get_xpath('.// a/@ href')'看看你得到了什麼。 – furas

+0

你如何解決這個問題?像獲得字符串? – muhammadn

回答

1

根據Scrapy Request的第一個參數需要字符串。但在您的代碼l.get_xpath('.//a/@href')正在返回一個列表。因此,請嘗試僅將字符串發送到請求的url

例如:

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