我无法弄清楚这段代码有什么问题。我想抓第一页,然后,对于该页面上的每个链接,转到第二页以提取项目描述。当我运行下面的代码时,我得到: exception.TypeError: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 :(得分:1)
根据Scrapy Request的第一个参数取字符串。但是在您的代码l.get_xpath('.//a/@href')
中返回一个列表。因此,请尝试仅将字符串发送到请求url
。
例如:
Request("Some_link_goes_here", callback=self.parse_link,meta={'l':l})