如何将从 Chrome 复制的 css 选择器路径转换为 ​​beautifulsoup 对象?

Posted

技术标签:

【中文标题】如何将从 Chrome 复制的 css 选择器路径转换为 ​​beautifulsoup 对象?【英文标题】:How do I convert css selector path copied from Chrome to beautifulsoup obejct? 【发布时间】:2020-01-27 22:03:48 【问题描述】:

我一直在尝试创建一个函数,当给出从 Chrome 开发工具复制的 css 选择器路径时返回 beautifulsoup 对象。

当我从 Chrome 复制一个元素的 css 选择器路径时,它是这样的:

body > table > tbody > tr:nth-child(2) > td.ColumnText2

如果我想让它成为一个合法的 beautifulsoup 对象,我会手动解析它

html = urlopen("https://someurl.com")

bs = BeautifulSoup(html, 'html.parser')

bs.body.find_all('table')[3].find_all('tbody')[0].find_all('tr')[2].find_all('td', 'class': 'ColumnText2')

但这真的很笨拙,如果我必须手动完成,那么创建一个函数是没有意义的。是否有某种内置解析器可以立即将此 css 选择器路径转换为 ​​beautifulsoup 对象?

【问题讨论】:

也许看看soup.select 允许通过css搜索的方法? @politicalscientist 哇,它马上就奏效了。我什至不需要做任何事情。也许我应该更彻底地搜索。这解决了我的问题谢谢。如果您回答问题而不是评论,我会确保选择答案。 太棒了! .select 对我来说是一个改变游戏规则的人:) 【参考方案1】:

另请注意,即使源中没有 tbody 元素,Chrome 也会在表格中插入它。尝试从选择器中删除 > tbody

【讨论】:

确实如此。在我最终发现之前,这给了我过去的痛苦。感谢您的意见。【参考方案2】:

** 请尝试在 Beautifulsoup 中选择**

html = urlopen("https://someurl.com")

bs = BeautifulSoup(html, 'html.parser')

name_tags=bs .select("body > table > tbody > tr:nth-child(2) > td.ColumnText2")

【讨论】:

以上是关于如何将从 Chrome 复制的 css 选择器路径转换为 ​​beautifulsoup 对象?的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器在开发者工具中复制 CSS 路径

如何在 Chrome 中启用 CSS 选择器分析

基于元素文本的 CSS 选择器? [复制]

如何让 CSS 选择器在 Chrome 17 的开发者工具中工作?

如何在 Chrome 开发者工具中使用 XPath 或 CSS 选择器搜索 DOM 元素?

Chrome 是如何对 CSS 规则进行分类的? [复制]