【问题标题】:getting content from CSS3 pseudo element using BeautifulSoup4使用 BeautifulSoup4 从 CSS3 伪元素中获取内容
【发布时间】:2017-06-18 02:31:36
【问题描述】:

我目前正在学习使用 Python 和 Beautiful Soup 进行网页抓取。我得到了一个任务,其中网页在 css 伪元素内具有星级评分

<span class="bb_rating bble_50">
  ::before
  ::after 
</span>

bble_50::after {
  content: "\e00b\e00b\e00b\e00b\e00b";
}

我想知道如何从 css psuedo 元素中获取内容? 需要帮忙。谢谢

【问题讨论】:

  • 看起来像个旅行顾问。是不是?您能否首先展示如何获取页面源?谢谢。
  • 是的,它来自旅行顾问,但我的导师只是更改了一些 css,所以我无法从任何地方复制粘贴。 :)

标签: python web-scraping beautifulsoup


【解决方案1】:

我认为您实际上不应该在这里解析 CSS。只需将类名映射到评级:

class_to_rating = {
    "bble_45": 4.5,
    "bble_50": 5
}
elm = soup.select_one(".bb_rating")
rating_class = next(value for value in elm["class"] if value.startswith("bble_"))

print(class_to_rating.get(rating_class, "Unknown rating"))

【讨论】:

  • 听起来不错。谢谢你。但是有什么方法可以让我真正获得伪选择器。如果我使用 Node.js,我可以使用 javascript 获取它
  • @raju 好吧,有像 tinycss 这样的 CSS 解析器。总是有正则表达式。而且,如果selenium 是一个选择,通过value_of_css_property 访问content css 属性可能会有所帮助..
  • 非常感谢。这有帮助。您还可以帮助我在“partial_entry”类中单击“更多”后如何获取内容。我应该为此打开另一个问题。
  • @raju 是的,请创建一个新问题。谢谢!
  • :: 你能解释一下 -- rating_class= next(value for value in elm["class"] if value.startswith("bble_")) -- 是如何工作的。我是 python 新手
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 2021-02-14
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2014-10-25
  • 2015-03-30
相关资源
最近更新 更多