【问题标题】:Scraping IMDb Review Page with lxml and requests package使用 lxml 和请求包抓取 IMDb 评论页面
【发布时间】:2015-05-06 13:33:06
【问题描述】:

我想借助 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]

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

【问题讨论】:

    标签: python lxml lxml.html


    【解决方案1】:

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

    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>?

    【讨论】:

    • 为什么我不能使用我的 xpath 访问它?
    • @GokuShanth 因为在您的 XPath 中您显式搜索 HTML 文件中不存在的 tbody 元素,但您的浏览器将其添加为一个元素,因此原始 XPath 没有结果因为它不匹配任何现有的树。删除 tbody 并且您的 XPath 工作
    • 我也在尝试这个页面 - stackoverflow.com/questions/18366211/… 并使用 xpath 获取问题标题。 xpath 是 - /html/body/div[5]/div[2]/div/div[1]/h1/a 但它仍然没有给我文本。为什么???
    • @GokuShanth 如果您已登录,那就是 XPath。您的 python 脚本未登录到 stackoverflow,因此您必须使用其他脚本:/html/body/div[5]/div[2]/div/div[2]/h1/a。如果您使用更短且更有意义的 XPath "//div[@id='question-header']/h1/a" 它适用于这两种情况
    • 感谢一百万!我认为萤火虫不是那么好。 Chrome 上的 XPath Finder 更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多