我一直在做一个从这个IMDB网站提取数据的简单问题,但是因为我无法理解这个问题的常见方法,所以我找到了自己的方法并陷入困境。
我正在尝试获取名称和发布年份html代码如下所示:
<div class="a">
<div>
<div>
<div class="b">
<h3 class="c"><span class="d">1</span> <a href="link%20here">name of
movie</a> <span class="e">release year</span></h3>
</div>
</div>
</div>
</div>
现在我完成了名称提取但我无法提取发布年份,请帮助
soup = BeautifulSoup(r.text)
item = soup.find_all("div" , {"class" : "a"})
for i in item:
title = i.find("div" , {"class" : "b"}).a
release_year = i.find("div" , {"class" : "b"}.span
print(title.get_text() , release_year.get_text())
输出结果如下:
(电影名称,'1)
我希望输出为
(电影名称,1990年)
答案 0 :(得分:0)
release_year = i.find("div" , {"class" : "b"}.span
会导致release_year
指向结果标头内的第一个范围。第一个范围是搜索结果编号,而不是发布年份。
相反,请按类属性值查找:
import requests
from bs4 import BeautifulSoup
url = "http://www.imdb.com/search/title?at=0&sort=num_votes,desc&start=1&title_type=feature&year=1950,2012"
r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
search_results = soup.find_all("div", class_="lister-item-content")
for result in search_results:
header = result.find("h3", class_="lister-item-header")
title = header.a
release_year = header.find(class_="lister-item-year")
print(title.get_text(), release_year.get_text().strip("()"))
打印:
(u'The Shawshank Redemption', u'1994')
(u'The Dark Knight', u'2008')
...
(u"One Flew Over the Cuckoo's Nest", u'1975')
(u'The Truman Show', u'1998')