【问题标题】:Get text from multiple classes in scrapy从scrapy中的多个类中获取文本
【发布时间】:2017-07-06 12:17:53
【问题描述】:

我想从网站抓取数据。我用这个代码

import scrapy 

class KamusSetSpider(scrapy.Spider):
    name = "kamusset_spider"
    start_urls = ['http://kbbi.web.id/abadi']

    def parse(self, response):
        SET_SELECTOR = '.tur highlight'
        for brickset in response.css(SET_SELECTOR):
            yield {
                'name': brickset.css(SET_SELECTOR).extract_first(),
            }

这是检查元素:

我想得到红色椭圆中的每一个文本,比如mengabadi,mengabadikan等。'b'标签中有多个类=> tur highlight。但是,我没有得到任何结果。

有什么问题?如何解决? 我已将代码更改为:

def parse(self, response):
        for kamusset in response.css("div#d1"):
            text = kamusset.css("div.sub_17 b.tur.highlight::text").extract()
            print(dict(text=text))

但仍然无法正常工作。它返回 null。

【问题讨论】:

  • 选择器应该是'.tur.highlight'...

标签: python scrapy web-crawler


【解决方案1】:

选择器.tur highlight 的意思是 - 在类tur 的所有元素中选择元素highlight

要选择具有多个类的元素,请使用不带空格的选择器

SET_SELECTOR = '.tur.highlight'

【讨论】:

  • 很抱歉,它仍然无法正常工作。我无法收到短信 mengabadi、mengabaikan 等。为什么??
  • 认为数据是通过JS渲染的。您可以使用 scrapy splash 查看呈现的 HTML。
【解决方案2】:

据我了解您的问题,您想从单个 css_selector 中具有不同类名的不同位置(标签)提取文本。

text = kamusset.css("div.sub_17::text, b.tur.highlight::text").extract()

这肯定行得通

【讨论】:

    【解决方案3】:

    这样就可以了!!

    text : Selector(text=response.body).xpath('//b[@class="tur highlight"]/text()').extract()
    

    将返回所有出现的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 2018-06-15
      • 2014-03-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多