从第二级链接中提取数据,scrapy

先生

有一个网站,其中包含指向其他网页的链接。我要执行以下操作:

  1. 转到页面上的每个链接
  2. 提取<p></p>标签之间的所有文本

为此,我编写了以下解析器:

 def start_requests(self):
    date=" "
    for url in self.urls:
        yield Request(url=url,meta={'date':str(url)[-15:-5]},callback=self.parse)

def parse(self, response):
    sel = Selector(response)
    sites = sel.xpath('//*[@id="content"]/div[2]/div/div/div[1]')
    passed_date=response.meta.get('date')
    items=[]
    for site in sites:
        item = DmozItem()
        # item['title'] = site.xpath('.//div/a/text()').extract()
        item['link'] = str(site.xpath('.//a/@href').extract()).replace("u'","")
        item['link']=item['link'].replace("'","")
        # item['time'] = site.xpath('.//div/text()').extract()
        # item['date'] = passed_date
        self.all_articles.append(item)
        item['text']=[Request(url=link_of_the_article,callback=self.get_text_of_the_article) for link_of_the_article in item['link'].split(',')]
    return items

def get_text_of_the_article(self,response):
    sel=Selector(response)
    article_text=""
    item=DmozItem()
    item['text']=sel.xpath('//*[@id="articleText"]/p[1]').extract()
    return items.append(item)

但是,当我打印item['text']结果为:

{[<GET %20http://www.domain.com/article/2014/01/06/libya-economy-idUSL6N0KD2L320140106%5D>]}

如何获取特定标签之间的文本?

Shaktimaan

您看到的原因:

{[<GET %20http://www.domain.com/article/2014/01/06/libya-economy-idUSL6N0KD2L320140106%5D>]}

这是因为您要保存Request对象item['link']而不是放弃它。

这就是你应该做的。在线注释中的解释。

def parse(self, response):
    sel = Selector(response)
    sites = sel.xpath('//*[@id="content"]/div[2]/div/div/div[1]')
    passed_date=response.meta.get('date')
    items=[]
    for site in sites:
        item = DmozItem()
        # No need to replace u'. It is an internal representation for unicode
        # strings. It won't affect your data
        links = site.xpath('.//a/@href').extract()
        self.all_articles.append(item)
        # For all the links, yield a Request and send the 
        # item object
        for link in links:
            yield Request(url=link, callback=self.get_text_of_the_article, meta={'item': item})


def get_text_of_the_article(self,response):
    sel=Selector(response)
    # Get the item object sent from parse method
    item = response.request.meta['item']
    # You can save the link url here
    item['link'] = response.url
    item['text'] = sel.xpath('//*[@id="articleText"]/p[1]').extract()
    return item

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从FetchXML访问第二级链接的实体

来自分类Dev

在PHP中获取JSON数据的第二级

来自分类Dev

CheckedListBox中的第二级

来自分类Dev

在Ruby中从第二级调用第二级函数

来自分类Dev

将悬停类添加到第二级菜单链接

来自分类Dev

如何从第二级父级访问元素?

来自分类Dev

TreeView不显示第二级子级

来自分类Dev

如何使用jQuery each()在JSON数据中获取第二级数组值

来自分类Dev

转换Multindex数据框并按位置更改第二级索引

来自分类Dev

如何从Stripe JSON对象获取第二级数据

来自分类Dev

第二级多索引上的时间片

来自分类Dev

在jQuery中选择元素第二级

来自分类Dev

使用CTE遍历树中的第二级

来自分类Dev

在Drupal 8中打印第二级菜单

来自分类Dev

BreezeJS谓词在第二级扩展实体上

来自分类Dev

HTML和CSS第二级下拉

来自分类Dev

在第二级R功能中的子集

来自分类Dev

如何强制第二级多重索引的值?

来自分类Dev

第二级包括使用sequelize

来自分类Dev

转到JSON中的第二级数组

来自分类Dev

JSON配对-如何显示第二级ListView

来自分类Dev

基于MultiColumn第二级的圆柱

来自分类Dev

如何在Pandas DataFrame中将第二级索引更改为第二级列?

来自分类Dev

如何强制将熊猫数据框的第二级添加到第一级?

来自分类Dev

在第二级索引上有效地组合数据帧

来自分类Dev

如果第二级父级不存在,则给子级元素类

来自分类Dev

使用自动映射器忽略第二级子级

来自分类Dev

使第二级ul代替父级li的高度为100%

来自分类Dev

使用Facebook查找第二级和第三级连接