Python 2.7 网站存储其数据的位置

Python 2.7 网站存储其数据的位置,python-2.7,python-requests,Python 2.7,Python Requests,我刚刚开始使用Python Web抓取请求。这可能是一个广泛的问题,我会尽量简短 我遇到过这样的情况:有时可以下载整个页面源代码,其中包含r.content(其中r是请求的get调用的响应对象) 有时数据的某些部分以json格式存储。。。在可以通过深入观察get和post调用来访问的文件中 然而,我甚至发现网站的全部内容都在DOM中,但部分内容既不在页面源代码中,也不在Json文件中 我想知道一个网站可以在多少这样的地方存储数据? (只是名字,我不想知道怎么去那里) 对于最后一种类型的网站,我几

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

我遇到过这样的情况:有时可以下载整个页面源代码,其中包含
r.content
(其中r是请求的get调用的响应对象)

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

然而,我甚至发现网站的全部内容都在DOM中,但部分内容既不在页面源代码中,也不在Json文件中

我想知道一个网站可以在多少这样的地方存储数据? (只是名字,我不想知道怎么去那里)

对于最后一种类型的网站,我几乎观察了每一个请求,但找不到数据在哪里

除了上面提到的2个地方,还有其他地方吗?或者,这是唯一两个表明我没有做好我的工作的权利,观察电话的请求

你可以用简短的要点来回答,我可以从那里开始学习


提前感谢。

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

请注意,我所描述的是泛化,和大多数泛化一样,您可能会发现不适合它的例外情况

大致上,我们可以将显示的数据类型(针对最终用户)分为两类

  • 预渲染
  • 后期渲染
预渲染

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

我们正在慢慢远离这种类型的结构,但目前大多数网页都使用这种结构

在这里,Web抓取相对容易,因为我们可以通过编程拉取html页面,而不必担心它附带的javascript代码

几乎所有情况下,
请求
美化组
的组合都应该有效(假设您可以确定文档的一般结构)

后期渲染

在这里,从服务器返回的HTML页面只是实际数据的“骨架”或占位符。数据由附带的JS代码呈现

在这种情况下,如果您通过(例如)请求获取源文件,您将得到一个空壳,其中没有数据

为此,如果您在渲染时检查浏览器发出的调用(chrome的网络选项卡或firefox的检查工具或更流行的firebug),您很可能会看到ajax请求从服务器返回实际数据)

根据请求的发出方式,您可以点击ajax端点,并以JSON格式获取数据

您可以使用
response.json()
函数将其提取到python目录中

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

抓取此类页面的一种方法是在无头浏览器中“呈现”页面,该浏览器执行JS代码并返回HTML,可通过解析器(如
beautifulsoup

beautifulsoup能够与许多人合作,其中之一是
html5lib
,这可以解决这个问题

你也可以看看或者

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

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

一个好的开始方法是查看正在提供的裸html,通过
curl
请求下载页面。获取
,或在浏览器中禁用javascript时简单地呈现页面


祝你好运。

谢谢你的详细回复+1为此。。。这确实很有帮助。然而,我想找到的是第三种类型的网页,您最终选择了selenium之类的模块。我的意思是,是的,它们很有帮助,但是如果不使用浏览器并将其保持为纯python,就不能获得结果吗?我们现在知道html、json、xml。还有其他的吗?再一次,我并不是在寻找一个可以刮取的方法,而是在它可能存储数据的地方。。。再次感谢您,您可以寻找需要浏览器驱动程序和带有GUI的机器的机器,尽管有解决方法。您可以开始,但首先尝试将beautiful soup与html5lib结合使用,因为这可能是两个选项中最快的一个。