网站存储其数据的位置

时间:2014-09-26 05:30:45

标签: python-2.7 python-requests

我刚开始使用Python Web抓取请求。这可能是一个广泛的问题,我将尽量使其尽可能简短。

我遇到的情况是,有时可以使用r.content下载整个页面源(其中r是请求的get调用的响应对象)

有时,某些部分数据以json格式存储...在可以通过深入观察get和post调用访问的文件中。

但是,我甚至发现整个内容都在DOM中的网站,但其中一部分既不在页面源也不在Json文件中。

我想知道网站中有多少这样的地方可以存储数据? (只是名字,我不是在寻找如何到达那里)

对于这些最后一类网站,我观察了几乎所有的请求调用,但找不到数据的位置。

除了上面提到的2之外,还有其他地方吗?或者那些只是两个表明我没有按照观察请求电话的方式工作?

你可以在简短的要点中回答它,我可以从那里学习。

提前致谢。

1 个答案:

答案 0 :(得分:1)

让我们假设我们只讨论HTML数据。 Web服务器可以为您提供许多其他格式的数据(JSON / XML等)

请注意,我所描述的是概括,与大多数概括一样,您可以找到不适合的异常。

从广义上讲,我们可以将显示的数据类型(针对最终用户)划分为两类

  • 预渲染
  • 发布后

预渲染

整个HTML页面在服务器端构建并发送到客户端。在这里,JS方面关注的是用户交互,而不关心数据的结构。

我们正逐渐远离这种类型的结构,但目前绝大多数网页都使用此结构。

网页报废在这里相对容易,因为我们可以以编程方式提取html页面,而不用担心随附的javascript代码。

requestsbeautifulsoup的组合应该适用于几乎所有情况(假设您可以识别文档的一般结构)。

发布后

这里从服务器返回的HTML页面只是一个"骨架"或实际数据的占位符。数据由随附的JS代码呈现。

在这种情况下,如果您通过例如。,request获取源文件,您将得到一个空shell,其中没有数据。

如果您在渲染时检查浏览器进行的调用(Chrome浏览器的网络选项卡或firefox的检查工具或更受欢迎的firebug),您很可能会看到带回来的ajax请求来自服务器的实际数据)

取决于请求的生成方式,您可以点击该ajax端点,并以JSON格式获取数据。

您可以使用response.json()函数将其解压缩为python-dicts。

在某些(罕见)情况下,不会有ajax调用,但从服务器提供的HTML仍然是shell。实际数据是该服务文件的一部分,但作为JS代码本身的一部分存储。这可以出于各种原因,例如将动态数据发送到静态js文件,或者只是为了阻止简单的抓取页面的尝试。

抓取此类网页的一种方法是渲染'无头浏览器中的页面,它执行JS代码并返回可通过beautifulsoup等解析器解析的HTML

beautifulsoup可以使用许多parsers,其中一个是html5lib,可以解决这个问题。

您还可以查看seleniummechanize

或者您可以尝试自己解析js代码,这可能会更快。

在得出使用内容的结论时,需要仔细检查页面在浏览器上的呈现方式。即使您没有看到ajax请求,服务器提供的html也不一定是浏览器显示它的方式。

一个好的开始方法是查看正在投放的裸-html,方法是通过curlrequests.get下载页面,或者只是在浏览器中使用javascript禁用它。< / p> 祝你好运。