以下HTML代码来自有关电影评论的网站。我想从下面的代码中提取星星,它们分别是John C. Reilly
,Sarah Silverman
和Gal Gadot
。我该怎么办?
代码:
html_doc = """
<html>
<head>
</head>
<body>
<div class="credit_summary_item">
<h4 class="inline">Stars:</h4>
<a href="/name/nm0000604/?ref_=tt_ov_st_sm">John C. Reilly</a>,
<a href="/name/nm0798971/?ref_=tt_ov_st_sm">Sarah Silverman</a>,
<a href="/name/nm2933757/?ref_=tt_ov_st_sm">Gal Gadot</a>
<span class="ghost">|</span>
<a href="fullcredits/?ref_=tt_ov_st_sm">See full cast & crew</a> »
</div>
</body>
</html>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
我将使用for循环遍历每个div class
,直到找到带有文本Stars
的类,然后在其中提取名称。但是我不怎么编码,因为我对HTML语法和模块不太熟悉。
答案 0 :(得分:1)
我将展示如何实现此功能,并看到您只需要学习BeautifulSoap语法。
首先,我们要对属性为“ class”的“ div”标签使用该方法findAll
。
divs = soup.findAll("div", attrs={"class": "credit_summary_item"})
然后,我们将过滤掉所有没有星号的div:
stars = [div for div in divs if "Stars:" in div.h4.text]
如果只有一个开始的地方,可以将其淘汰:
star = start[0]
然后再次找到标签“ a”中的所有文本
names = [a.text for a in star.findAll("a")]
您可以看到我没有使用任何html / css语法,只有汤。 希望对您有所帮助。
答案 1 :(得分:1)
您可以遍历a
credit_summary_item
中的所有div
标签:
from bs4 import BeautifulSoup as soup
*results, _ = [i.text for i in soup(html_doc, 'html.parser').find('div', {'class':'credit_summary_item'}).find_all('a')]
输出:
['John C. Reilly', 'Sarah Silverman', 'Gal Gadot']
编辑:
_d = [i for i in soup(html_doc, 'html.parser').find_all('div', {'class':'credit_summary_item'}) if 'Stars:' in i.text][0]
*results, _ = [i.text for i in _d.find_all('a')]
输出:
['John C. Reilly', 'Sarah Silverman', 'Gal Gadot']
答案 2 :(得分:0)
您也可以使用regex
stars = soup.findAll('a', href=re.compile('/name/nm.+'))
names = [x.text for x in stars]
names
# output: ['John C. Reilly', 'Sarah Silverman', 'Gal Gadot']