【问题标题】:Web scraping with R, XML Package - paths on web browser are different from parsed HTML download in R使用 R、XML 包进行 Web 抓取 - Web 浏览器上的路径与 R 中解析的 HTML 下载不同
【发布时间】:2014-02-02 00:53:01
【问题描述】:

我正在网页抓取this website(葡萄牙语)。

当您使用谷歌浏览器时,xpath 命令//div[@class='result-ofertas']//span[@class='location']/a[1] 会正确返回待售公寓的附近区域。您可以使用 Chrome 的扩展程序 xpath helper 自己尝试一下。

好的。所以我尝试用R下载网站来自动提取数据,使用XML包:

library(XML)    
site <- "http://www.zap.com.br/imoveis/sao-paulo+sao-paulo/apartamento-padrao/aluguel/?rn=104123456&pag=1"
html.raw <- htmlTreeParse(site,useInternalNodes=T, encoding="UTF-8")

但是当我在R中下载网站时,页面源已经不一样了。

前面的xpath命令结果为null:

xpathApply(html.raw, "//div[@class='result-ofertas']//span[@class='location']/a[1]", xmlValue)

但是,如果您手动将网站下载到您的计算机而不是使用 R 下载,那么上面的 xpath 就可以正常工作。

似乎 R 正在下载另一个网页(“移动”网页,正在下载 this one instead of the correct one),而不是 Chrome 中显示的网页。

我的问题不在于如何提取 R 正在下载的这个“不同”页面的信息。我实际上可以使用下面的 xpath 命令来处理它:

xpathApply(html.raw, "//p[@class='local']", xmlValue)

但我真的很想了解为什么以及如何发生这种情况。

更具体地说:

  1. 这里发生了什么?
  2. 为什么两个不同的网页(Chrome 和 R),即使地址相同?
  3. 有没有办法强制 R 下载我在 Chrome 中看到的确切网页(这很有用,因为我通常使用 xpath helper 扩展程序测试 xpath 命令)。

【问题讨论】:

    标签: xml r google-chrome xpath web-scraping


    【解决方案1】:

    该站点最有可能基于用户代理重定向请求。尝试在 R 中设置请求用户代理以匹配您的 Chrome 用户代理(可以在开发人员工具的网络选项卡上看到。只需选择一个请求并查看标头)。

    【讨论】:

    • 如果不是太麻烦,您能否更具体地说明我在 chrome 中的什么位置可以找到信息以及我必须在 R 中编写什么命令以确保它与用户代理匹配?谢谢!
    • 我发现了以下内容:User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36
    【解决方案2】:

    我已经用utils 包中的download.file() 函数解决了这个问题。我首先将文件下载到高清,然后解析它。但这需要很长时间,这不是最佳解决方案,我仍然不确定为什么会发生这种情况。因此,如果其他人有其他解决方案/答案...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 2020-04-13
      相关资源
      最近更新 更多