如何将 CSS Selector 的输出传递给美丽的汤?

Posted

技术标签:

【中文标题】如何将 CSS Selector 的输出传递给美丽的汤?【英文标题】:How to pass the output of CSS Selector to beautiful soup? 【发布时间】:2016-05-22 20:42:19 【问题描述】:

我想抓取一些网页,我正在使用一个名为“SelectorGadget”的 Chrome 扩展程序。它是一个 CSS 选择器。现在以这个 URL 为例:http://www.www2015.it/documents/proceedings/forms/proceedings.htm CSS 选择器为我提供了论文列表的输出: tr~ tr+ tr td+ td a 现在,问题是我不知道如何将这个输出传递给漂亮的汤。在以下几行中,.select() 无法识别这些选择器!

import requests
page = requests.get("http://www.www2015.it/documents/proceedings/forms/proceedings.htm")
import bs4
soup = bs4.BeautifulSoup(page.content)
soup.select("tr~ tr+ tr td+ td a")

【问题讨论】:

您可以发布您的代码吗?到现在为止你有什么? 你的意思是.select(...) @jonrsharpe 在我使用 .select() 时显示:不支持或无效的 CSS 选择器:“tr~” 然后使用受支持且有效的选择器,但这就是您在 BS 中使用选择器的方式。 @jonrsharpe 你的意思是选择器小工具返回了无效的选择器吗? 【参考方案1】:

问题是 - BeautifulSoup 有一个 very limited CSS selector syntax support。在您的情况下,与~+ 横向移动是行不通的。

如果您希望匹配此页面上的 pdf 链接,我会使用以下选择器:

soup.select("a[href$=pdf]")  # get the links where href ends with "pdf"

【讨论】:

你知道任何能够处理这些选择器的scarper吗? @RaminZahedi 是的,查看 lxml.cssselect。

以上是关于如何将 CSS Selector 的输出传递给美丽的汤?的主要内容,如果未能解决你的问题,请参考以下文章

如何将@selector 作为参数传递?

CSS3给网页穿上美丽的外衣

CSS3给网页穿上美丽的外衣

如何将 css 变量传递给 Javascript 对象中的媒体查询? [复制]

如何使用 React 中的 CSS 模块将多个类动态传递给子组件

在反应中使用css模块如何将className作为道具传递给组件