Python 如何在scrapy中解析使用xpath提取的其他URL?

Python 如何在scrapy中解析使用xpath提取的其他URL?,python,scrapy,Python,Scrapy,我正在根据排序的索引页生成一个项目列表。我有一个起始url和一个xpath规则列表,每个规则都要遵循: def parse(self,response): sel = Selector(response) sites = sel.xpath('//tbody/tr') items = [] for site in sites: item = EvolutionmItem() item['title'] = site.xpath('t

我正在根据排序的索引页生成一个项目列表。我有一个起始url和一个xpath规则列表,每个规则都要遵循:

def parse(self,response):
    sel = Selector(response)
    sites = sel.xpath('//tbody/tr')
    items = []
    for site in sites:
        item = EvolutionmItem()
        item['title'] = site.xpath('td/div[not(contains(., "Sticky:") or contains(.,"ANNOUNCEMENT"))]/a[contains(@id,"thread_title")]/text()').extract()
        item['url'] = site.xpath('td[contains(@id,"threadtitle")]/div/a[contains(@href,"http://forums.evolutionm.net/sale-engine-drivetrain-power/")]/@href').extract()
        item['poster'] = site.xpath('td[contains(@id,"threadtitle")]/div[@class="smallfont"]/span/text()').extract()
        item['status'] = site.xpath('td[contains(@id,"threadtitle")]/div/span[contains(@class,"highlight")]').extract()
        items.append(item)
    return items
这段代码是无错误的,并提取了我所需要的东西。现在我想访问每个URL,并从这些URL中提取额外的数据

最好的方法是什么?我似乎无法让request.meta正常工作

编辑

Girish的解决方案是正确的,但为了让它发挥作用,我必须确保我的
项['url']
不为空:

for site in sites:
    item = EvolutionmItem()
    ...
    if item['url']:
        yield Request(item['url'][0],meta={'item':item},callback=self.thread_parse)

您需要使用urlmeta回调参数生成请求对象

def parse(self,response):
    sel = Selector(response)
    sites = sel.xpath('//tbody/tr')
    for site in sites:
        item = EvolutionmItem()
        item['title'] = site.xpath('td/div[not(contains(., "Sticky:") or contains(.,"ANNOUNCEMENT"))]/a[contains(@id,"thread_title")]/text()').extract()
        item['url'] = u''. join( site.xpath('td[contains(@id,"threadtitle")]/div/a[contains(@href,"http://forums.evolutionm.net/sale-engine-drivetrain-power/")]/@href').extract())
        item['poster'] = site.xpath('td[contains(@id,"threadtitle")]/div[@class="smallfont"]/span/text()').extract()
        item['status'] = site.xpath('td[contains(@id,"threadtitle")]/div/span[contains(@class,"highlight")]').extract()

    yield Request(url = item['url'], meta = {'item': item}, callback=self.parse_additional_info) 

def parse_additional_info(self, response):
    #extract additional info 
    yield item

使用您的
触发新请求并以类似方式解析这些请求?对不起,这里有什么问题?我一直在找一个例子,结果是空的。Scrapy文档的示例似乎不适用于此:这与我的一次迭代非常相似,实际上,我在尝试传递
项['url']
时收到了类似的错误:raise TypeError('请求url必须是str或unicode,得到%s:'%type(url)。\uu name\uuuu)我尝试了json.dumps,但似乎也没有得到正确的形式。此外,我注意到我不再能够访问
项目中的字段
——这是因为我需要完全改变我的方法吗?我不熟悉python和scrapy——只是想把它弄清楚,可惜文档对我没有帮助。@Chad_C-Thar是因为xpath.extract()返回一个列表而不是字符串。您需要将项['url']转换为字符串或使用项['url'][0]。检查解决方案,我已经修改了解决方案。