如何将从 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 17 的开发者工具中工作?