soup.find_all 有效,但 soup.select 无效

Posted

技术标签:

【中文标题】soup.find_all 有效,但 soup.select 无效【英文标题】:soup.find_all works but soup.select doesn't work 【发布时间】:2017-12-13 12:08:47 【问题描述】:

我正在使用 css 选择器解析 html 页面

import requests
import webbrowser
from bs4 import BeautifulSoup

page = requests.get('http://www.marketwatch.com',  headers='User-Agent': 'Mozilla/5.0')
soup = BeautifulSoup(page.content, 'html.parser')

在使用 select 方法时,我无法选择带有类的列表标记。但是,我在使用 find_all 方法时没有问题

soup.find_all('ul', class_= "latestNews j-scrollElement")

这会返回我想要的输出,但由于某种原因,我不能使用 CSS 选择器。我想知道我做错了什么。

这是我的尝试:

soup.select("ul .latestNews j-scrollElement")

返回一个空列表。

我无法弄清楚我在使用 select 方法时做错了什么。

谢谢。

【问题讨论】:

【参考方案1】:

来自documentation:

如果你想搜索匹配两个或多个 CSS 类的标签,你 应该使用 CSS 选择器:

css_soup.select("p.strikeout.body")

在你的情况下,你可以这样称呼它:

In [1588]: soup.select("ul.latestNews.j-scrollElement")
Out[1588]: 
[<ul class="latestNews j-scrollElement" data-track-code="MW_Header_Latest News|MW_Header_Latest News_Facebook|MW_Header_Latest News_Twitter" data-track-query=".latestNews__headline a|a.icon--facebook|a.icon--twitter">
 .
 .
 .

【讨论】:

以上是关于soup.find_all 有效,但 soup.select 无效的主要内容,如果未能解决你的问题,请参考以下文章

找出某个类后如何在soup.find_all中获取一个元素? [复制]

BeautifulSoup字符串搜索

find_all的用法 Python(bs4,BeautifulSoup)

BeautifulSoup 从 find_all 的结果中找到 url

[Python]find_all函数 2020.2.7

假期十一