如何使用BeautifulSoup从IMDB数据中提取发布年份

时间:2016-07-29 10:10:38

标签: beautifulsoup imdb bs4

我一直在做一个从这个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年)

1 个答案:

答案 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')