zoukankan      html  css  js  c++  java
  • 抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项

    原文网址: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类来处理了。

  • 相关阅读:
    ARC和MRC兼容和转换
    ARC下的内存管理
    嵌入式硬件系列一:处理器介绍
    嵌入式Linux GCC常用命令
    一. Linux 下的常用命令
    ARM学习中的必知基本常识
    二叉搜索树详解
    从入门到高手,嵌入式必会技能及学习步骤总结
    史上最全Linux目录结构说明
    排序系列之六:快速排序法进阶
  • 原文地址:https://www.cnblogs.com/c123321/p/5533675.html
Copyright © 2011-2022 走看看