使用python lxml从IMDB返回空列表

时间:2016-01-30 12:45:24

标签: python web-scraping lxml imdb

我正在尝试使用LXML从IMDB中获取前250个电影列表,但其返回的空列表可以告诉我我犯的错误是什么。

from lxml.html import parse
tree = parse('http://www.imdb.com/chart/top')
movies = tree.findall('.//table[2]//a')

电影列表为空[]

2 个答案:

答案 0 :(得分:1)

我使用firepath在浏览器中测试时,你的XPath与链接页面中的任何元素都不对应("没有匹配的节点"被返回)。

这是一种对我有用的方法:

from lxml.html import parse
tree = parse('http://www.imdb.com/chart/top')
movies = tree.xpath("//table[contains(@class, 'chart')]//td[@class='titleColumn']/a/text()")
for movie in movies:
    print movie

更好地使用 xpath() 方法,它提供对XPath 1.0表达式的完全支持。上面使用的XPath参数的简要说明如下:

  • //table[contains(@class, 'chart')]:在HTML文档中的任意位置找到table元素,class属性包含文本"chart"
  • //td[@class='titleColumn']:然后在上述td内的任何位置找到table元素,其中class属性值等于"titleColumn"
  • /a/text():然后从这样的td中找到子元素a并返回其文本内容

上述代码段输出的一部分:

The Shawshank Redemption
The Godfather
The Godfather: Part II
The Dark Knight
Pulp Fiction
.....

答案 1 :(得分:0)

我的猜测是你使用错误的XPath进行解析,使用 Firebug ,电影表的正确xpath为

/html/body/div[1]/div/div[4]/div[3]/div/div[1]/div/span/div/div/div[2]/table/tbody

这将返回一个包含所有电影数据的表格。

您需要更多处理来获取每部电影信息。

我还建议使用请求lib进行HTTP查询