Fate

用google浏览器爬取JS生成的网页时network的使用

Markdown

前言:最近使用python写了个爬虫,爬取动态网页上的数据,google自带的network帮了我很多忙,记录一下使用的时候的收获.这篇博客将随着我对network的不断加深认识而更新.

如何使用network

  • 在某网站,比如我自己的页面,按F12,出现如下界面,找到其中的network,然后按F5刷新.然后会获得传输的所有数据包.
    Markdown

  • network下面有一个Preserve log,之前默认是没有点击的.如果打上勾,当你从上一个网页跳转到下一个网站时,本来上一个网页的数据会被清空,如果打上勾,那么前面的过程也会被记录,这个很重要,比如当你登录到某网站时打上勾就可以看到登录页面传送的信息.
    Markdown

  • 下图所显示的也就是我们所抓到的包了,所有的包都在ALL里面,但是在ALL里面的包太多了,一个个查看太费时间.常用的包有两个XHRDoc里面,XHR里面携带的数据包内容一般是json数据;Doc里面携带的数据包内容一般是html。一般可以在这两个里面找到页面生成的数据.
    Markdown

  • 以上是network的基本应用,下面说如何查看包中数据.

network中数据包怎么看.

  • 静态网页中的数据一般很容易找到,但是如果是js生成的数据,那么在网页的源代码中是无法看到的,比如说这个网站,我们需要这个表格的信息(图一).但是我们在源代码中只能看到如下信息(图二).
    Markdown (图一)
    Markdown (图二)

  • 解决方法只有两种,模拟这个网页的js代码生成数据,这不太现实;另一种就是分析包数据包,找到需要的信息.方法如下,在下面的数据包的信息里面点击Preview,就可以看到该数据包所携带的信息,一般JS生成的数据都是以json数据(类似于python的dict)的形式储存在里面.
    Markdown

  • OK,找到了数据,接下来就是怎么获得这些数据了.接下来点击该数据包的Headers,看如下信息:我们发现了该数据源的url,发现了该网页是以post方法进行访问的.既然是post,那么下面应该会有数据,我们接着往下看.
    Markdown

  • 翻到了下面,果然访问该数据源是要携带数据的,我们只要利用这些数据,就可以顺利获得该数据源的信息了.
    Markdown

  • 还有一个值得注意的地方就是我们一般都需要伪装成一个正常的浏览器,所以需要设置用户代理(User-agent),另外如果网页有cookie的话,我们需要将它存下了,下面我的python代码将实现这些功能。当然,如果对一些防爬虫比较严格的网页,可能就需要完全模拟Headers了.
    Markdown

以下是python实现爬取这些数据的一般模板代码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cookielib
import json
import urllib2
import urllib
#获得一个cookieJar实例
cj = cookielib.CookieJar()
#cookieJar作为参数,获得一个opener的实例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#伪装成一个正常的浏览器,避免有些web服务器拒绝访问。
opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]
#需要访问数据源Headers中的的url
url = "XXXXXXXXX"
#最下面需要提交的数据,以键值对进行储存
submit_data = urllib.urlencode({"xxx":"XXX","yyy":"YYY"})
#以post的方法访问登陆页面,访问之后cookieJar会自动保存cookie
op = opener.open(url,submit_data)
#读取获得的数据源
data = op.read()
#解析成json数据,接下来就可以直接以键值对的方式访问数据源了
data = json.loads(data)

热评文章