【发布时间】:2017-10-29 19:46:55
【问题描述】:
我的问题可能有一个更好的标题,但它是: 我通过使用 BeautifulSoup 和 findall 将元素从 html 返回到列表,这是我得到的示例:
[<div class="tightLt col span-1-3">
<div class="middle">
<div class="cell"><i class="sqLed middle sm yellow margRtXs "></i></div>
<div class="cell"><span class="middle">Neutral Outlook</span></div>
</div>
</div>,
<div class="tightLt col span-1-3">
<div class="middle">
<div class="cell"><i class="sqLed middle sm yellow margRtXs "></i></div>
<div class="cell"><span class="middle"><span class="showDesk">No opinion of</span> CEO</span>
</div>
</div>
</div>]
[<div class="tightLt col span-1-3">
<div class="middle">
<div class="cell"><i class="sqLed middle sm red margRtXs "></i></div>
<div class="cell"><span class="middle">Doesn't Recommend</span></div>
</div>
</div>,
<div class="tightLt col span-1-3">
<div class="middle">
<div class="cell"><i class="sqLed middle sm red margRtXs "></i></div>
<div class="cell"><span class="middle">Negative Outlook</span></div>
</div>
</div>,
<div class="tightLt col span-1-3">
<div class="middle">
<div class="cell"><i class="sqLed middle sm yellow margRtXs "></i></div>
<div class="cell"><span class="middle"><span class="showDesk">No opinion of</span> CEO</span>
</div>
</div>
</div>]
问题在于,在第一个 html 中,CEO 批准(在这两种情况下,CEO 批准的对应值是“CEO 没有意见”,但也可能是“CEO 不批准”和“CEO 批准”)是"span" 标记内列表中的第二个元素,但它是第二个 html 中的第三个元素。所以我不能使用列表索引从列表中选择元素。我该如何解决我的问题?
这是返回上述列表的部分代码
from bs4 import BeautifulSoup
import requests
url = "https://www.glassdoor.com/Reviews/Walmart-Reviews-E715.htm"
html_content = response = requests.get(url)
soup = BS(html_content, "lxml")
reviews = soup.find("div", id="EmployerReviews").find_all("li", class_="empReview")
for review in reviews:
x = soup.findAll("div", class_="cell reviewBodyCell")
for z in x:
z.findAll("div", class_="tightLt col span-1-3")#returns the list that contains needed information
【问题讨论】:
-
您指的是未出现在提供的 HTML 中的“CEO 批准”。我们是否应该假设您指的是第二列。如果您的问题准确地包含您想要表达的内容,那将会很有帮助。一些入门代码也会很有用。
-
贴出你当前的代码,html标记不够
-
抱歉,我的意思是“>没有 CEO 的意见”对应于第一和第二个 html 列表中 CEO 的批准
-
好的,我会发布完整的代码,但您需要先登录才能获取数据
-
它
for x in soup.select("[class='showDesk']"):print(x.text)应该会给你同样的结果。
标签: python html web-scraping beautifulsoup