使用lxml和请求包刮擦IMDb Review页面

时间:2015-03-05 08:46:52

标签: python lxml lxml.html

我想借助lxml提取特定电影的用户评论。 在此之前,我需要先了解一下评论的数量。

示例评论页面为Interstellar

我找到了XPath,在Firebug的帮助下找到了用户评论:

/html/body/div[1]/div/layer/div[4]/div[3]/div[3]/div[3]/table[2]/tbody/tr/td[2]

我有这段代码来提取该行

reviewPage = lxml.html.document_fromstring(requests.get("http://www.imdb.com/title/tt0816692/reviews?start=0").content)
number_of_reviews = reviewPage.xpath("/html/body/div[1]/div/layer/div[4]/div[3]/div[3]/div[3]/table[2]/tbody/tr/td[2]")[0]

然而,在打印评论数量时,我什么都没得到。问题是什么 ?

1 个答案:

答案 0 :(得分:2)

您可以使用以下行提取评论数量:

number_of_reviews = int(reviewPage.xpath("//div[@id = 'tn15content']/table[2]/tr/td[2]")[0].text_content().split()[0])

如果稍微修改一下,您甚至可以使用自己的代码。问题出在你的XPath上。摆脱tbody部分,它可以工作。

number_of_reviews = reviewPage.xpath("/html/body/div[1]/div/layer/div[4]/div[3]/div[3]/div[3]/table[2]/tr/td[2]")[0]

您可能在浏览器的开发人员工具的帮助下获得了HTML的结构,这增加了tbody,即使它在html中不存在。如果您通过View Source (Ctrl+U)直接观看HTML文件,您会发现文件中没有tbody

请参阅Why does firebug add <tbody> to <table>?