所谓爬虫,首先要通过各种手段爬取到想要站点的数据。 web2.0之后,各种网络站点类型越来越多,早期的站点多为静态页面【html 、htm】,后来逐步加入 jsp。asp,等交互性强的页面。再后来随着js的兴起,也处于站点的美观和易于维护,越来越多的ajax异步请求方式数据站点。[不扯犊子了 ,马上上示例]
参与工作时间不是很长,但工作期间一直做不同的爬虫项目。对常见的页面数据获取,有一些简单的认识。 接触到的页面分为三类。
A 静态页面(数据在源码中直接可以获取到)
B数据在基源码中没有,携带请求数据请求,在浏览器解析过程中,封装出含数据的源码
C数据在浏览器解析后的源码中 没有,是通过页面的js函数,调用请求的js数据,显示的。
分别举个例子以示说明:
A ,这一类最简单,例如百度首页 ,现在想获取它的页面显示的链接信息
查看源码
不难发现页面中的链接信息在源码中都有体现,直接写正则
<a\s[^>]*?href\s*=[^\\]\s*['"]?([^'"\s>*?]*)[^>]*>[\s\S]*?(.*?)[</a>].+?
在RegexBuddy 3 工具中
通过去group 1 [链接] group[Aname] 取得想要的数据,再通过队列循环排除依次取出百度链到的所有站点。
B
像企业类型信息查询网站 http://qyxy.baic.gov.cn/zhcx/zhcxAction!list.dhtml?op=cx
想要获取通过程序输入企业名称 而查询出有关注册信息
不难发现当人工输入企业名称【2】 是 url【1】中的地址栏并没有变化,但是 【3】的响应结果却会随着我们查询的词不同而响应出不通的结果。
这就是上述的基页面不变,但是源码在请求后解析加载显示的不一样 。
对于这种情况 我们需要借助工具分析在我们在点击查询的操作时进行了那些与服务器的交互,
通过httpwatcher
通过分析不难发现,在点击查询的动作时,http请求 通过post方式发送了一个请求数据到给服务器端 zhcxModel.ent_name 百度。这样通过程序建立http链接时,我们把请求数据推送给服务器
然后再接收数据源码,这是源码中就含有查询出来的信息了,再通过A的方式,把想要的信息通过正则取出来。
C 例如土豆的用户信息页面 http://www.tudou.com/home/tui/u57045481t2.html 【随便拿了一个页面,若牵涉个人隐私,请联系我,我会立马更改】
想抓取土豆的粉丝数,关注数,及粉丝的详细信息
这个页面查看源码 看不到保护焊有粉丝数 1327【1】等 及 粉丝的名称、链接等【2】信息
通过httpwatcher 重新请求页面 ,记录与服务器交互的数据,
不难发现
粉丝数 信息 在请求时 发送的这个链接
http://www.tudou.com/my/tui/userInfo.html?uid=57045481&callback=jQuery16408569448299658144_1366125895716&_=1366125895774 中体现,再看蓝色圈中的数据即为该用户的id信息,在初始URL中也含有。这样就不难总结出 用户的关注人信息 数据 通过拼接 http://www.tudou.com/my/tui/userInfo.html?uid= + 用户ID + &callback=jQuery 即可获得。
再看
【2】粉丝人信息
与上述方法差不多 ,探寻到发送的js请求,获取json数据 。
像翻页类型的数据,1327个服务器端没有一次请求把所有数据加载过来,
观察粉丝人数的js请求地址 ,有两个参数pageSize currentPage 。pageSize 用来显示每一页显示多少个,currentPage用来显示当前页,页面中有总页数111,同时在刚探寻的js中也有总页数的信息,这样就很容易的通过变换currentPage 的值来依次通过A的方式去到用户的头像 ,姓名,等信息了。
不早了,明儿还得干活儿 ,今天就先到这儿了,这个目前接触到的一些类型数据分析,当然还有更复杂些的,接触面有限,等后续发现和学习我会陆续补充上的 。
欢迎指正和交流学习
爬虫技术交流_crawler QQ群:167047843