抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项

原文网址:http://www.crifan.com/summary_about_flow_process_of_fetch_webpage_simulate_login_website_and_some_notice/

这里只是做为小结和吸收要点

 

去访问一个URL地址,获得对应的网页的过程,其对应的内部机制是

准备好对应的Http请求(Http Request)+ 提交对应的Http Request

–>

获得返回的响应(Http Response) + 获得Http Response中的网页源码

 

一: 准备此Http请求Request (访问URL之前的准备工作)

    1:基本的url + 查询字符串

比如: 完整的url = http://www.crifan.com/?s=crifan&submit=Search

URL地址,其实涉及到编码和解码的问题:

具体可以看如下的

http://www.crifan.com/summary_url_encode_and_decode_during_http_get_post_request

    2:GET还是POST

2.1. get是从服务器上获取数据,post是向服务器传送数据。
2.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2.3. 对于get方式,
服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
2.4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
2.5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:
2.1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2.2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

 

更多的get和post的区别其实可以看:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

  

    3:必须或可选:Headers

即request header,头信息Headers,包含很多个Header

有些是必须的,有些是可选的(根据不同情况,可忽略的)

有的时候,甚至不设置任何header也是可以的。

    4:[可选]Post Data

如果是POST方法,则还需要填写对应的数据:

此数据:

  • IE中称为request body

  • Chrome中称为Post Data

换句话说:

如果是GET,则是没有POST数据的。

提示:所以,你在IE9中通过F12抓取到的内容中,会看到,对于所有的GET请求,对应的“请求正文(request body)”都是空的。

    5: 必须或可选:cookie

很多时候,访问对应url还需要提供对应的cookie。

一般来说,模拟登陆等情况下,往往都会涉及到cookie的

    6:其他一些可能需要准备的东西

(1)代理proxy

(2)设置最大超时timeout时间

二:提交HttpRequest,即可获得此http请求的响应Response(访问URL之后的要做的工作)

1.获得对应的响应response

2.从响应中获得对应的网页源码等信息

(1)获得返回的网页HTML源码(或json等)

(2)[可选]如果有需要,还要获得对应的cookie

(3)[可选]判断返回的其他一些相关信息,比如response code等

【网页抓取过程中的注意事项】

1.网页跳转Redirect

(1)直接跳转

(2)间接跳转

A。javascript脚本中有对应的代码实现网页跳转

B。本身所返回的HTML源码中包含refresh动作,所实现的网页跳转

 

三:抓取网页后,如何分析获得所需要的内容

      一般来说,去访问一个URL地址,所返回的内容,多数都是网页的HTML源码,也有其他一些形式的内容的,比如json等。

1. 对于HTML源码:

  (1)如果是Python中的话,可以通过调用第三方的Beautifulsoup库

   BlogsToWordPress v3.0 – 将百度空间,网易163等博客搬家到WordPress

   (2)直接使用正则表达式自己去提取相关内容

A。Python:使用re模块,常用的函数是find,,findall,search等。

B:C#:使用Regex类,用对应的pattern和match函数来匹配。

关于C#中的Regex,更多内容请参考:

【总结】C#中的Regex的使用心得和注意事项

2.对于Json

可以先去看专门的关于JSON的介绍:

【整理】什么是JSON+如何处理JSON字符串    

 

然后再看下面的如何处理Json。

(1)使用库(函数)来处理

A。Python

Python中,有对应的json库,常用的是json.load,即可将json格式的字符串,转换为对应的字典Dictionary类型变量,很是好用。

(2)还是使用正则表达式来处理

A。Python

Python中的re模块,同上。

B。C#

C#中貌似没有自带json的库,倒是有很多第三方的json库,但是我当时遇到解析json字符串的时候,觉得这些库,使用起来还是很麻烦,所以还是直接使用regex类来处理了。

 

posted @ 2016-05-27 10:21  张荣建  阅读(2729)  评论(0编辑  收藏  举报