使用 lxml 和请求包抓取 IMDb 评论页面
Scraping IMDb Review Page with lxml and requests package
我想借助 lxml 提取用户对特定电影的评论。
在此之前,我需要先找出评论数。
示例评论页面是 Interstellar
我在 Firebug 的帮助下找到了可以找到用户评论的 XPath:
/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]
但是,在打印评论数时,我什么也没得到。问题是什么 ?
您可以使用以下行来提取评论数:
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>?
我想借助 lxml 提取用户对特定电影的评论。 在此之前,我需要先找出评论数。
示例评论页面是 Interstellar
我在 Firebug 的帮助下找到了可以找到用户评论的 XPath:
/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]
但是,在打印评论数时,我什么也没得到。问题是什么 ?
您可以使用以下行来提取评论数:
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>?