[参考资料]如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站

1.背景

在网络,网页,网站处理方面,很多人都遇到过,想要用某种语言(Python,C#等),去实现一些需求,常见的有这几大类:

  • 想要从某静态网页中,提取某些内容
  • 想要抓取某些动态网页中的某些内容
  • 想要模拟登陆某个网站

对于这类需求,其基本的背后逻辑,都是相同的。

下面就是来介绍一下,如何实现这些功能。

2.搞懂访问网页所涉及的http相关的逻辑知识

先要搞懂对应的,访问url地址的背后的逻辑:

需要你提供哪些内容:

  • url
  • headers:部分可选,部分必须
  • cookies(可选)
  • post data
    • 当是POST方法时,才需要

然后获得什么样的内容:

  • html源码(或其他的,json字符串,图片的数据等等)
  • cookie(可能有):对于后续的访问其他的url,可能需要提供此处所返回的(新的)cookie

 

详细解释,可参考:

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

 

提示:

1.html的charset编码

关于html网页的编码方面的背景知识,最好再去看看:

【整理】关于HTML网页源码的字符编码(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解释


3.搞懂你所要处理的网页的执行的逻辑过程

简单的说就是,你自己所要处理的某个url地址,需要提供哪些值,然后才能获得你所需要的值。

先把你自己关心的这些逻辑搞懂,才能谈到后续用代码实现出来。

如果此逻辑过程很简单,那么你不用工具去分析,自己看代码,能自己分析出来,也是可以的。

但是此过程往往都很复杂,所以,一般都需要使用对应的开发人员工具去分析。

比如用IE9的F12去捕获对应的执行过程,然后从中分析出你所需要关心的某些网页的执行逻辑的。


详细解释和演示参见:

【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

 

提示:

1.其他各种的分析工具

对于IE9的F12,等不熟悉的话, 可以先去看看:

【总结】浏览器中的开发人员工具(IE9的F12和Chrome的Ctrl+Shift+I)-网页分析的利器

对于此部分内容,另外还有个帖子可参考:

【整理】各种浏览器中的开发人员工具Developer Tools:IE9的F12,Chrome的Ctrl+Shift+J,Firefox的Firebug

2. 复杂的参数值的分析

在用工具分析的过程中,你会发现有些所要分析的值,是相对比较复杂的,无法直接就获得,所以就需要去调试分析。

关于如何分析复杂的参数值是如何获得的,可以参考:

【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)
3.另外一个例子

后来又写了个例子,用于分析如何从songtaste的播放页面地址中找到歌曲的真实地址:

【教程】如何用IE9的F12去抓取某首Songtaste歌曲的真实地址


4.用某种语言去实现上述的逻辑

等把你要处理的所有的逻辑过程和执行顺序,都搞懂了之后,然后才是用某种语言去实现对应的逻辑过程。

 

提示:

不过,关于具体在代码中实现对应的逻辑,有一些通用的逻辑:

1. url地址的编码和解码

其中,如果涉及到,url地址的解码和编码的话,可以参考:

【整理】关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode)

2.关于headers,cookie,post data等如何处理

虽然是为动态网页抓取所写,但是基本的逻辑都是一样的:

【整理】网页抓取,模拟登陆,抓取动态网页内容等过程中,所涉及的Headers信息,Cookie信息,POST数据的处理逻辑

3.关于提取网页内容的方法

对于简单的html网页中的内容,当然是可以使用正则表达式的。

但是对于复杂的内容提取,还是建议用第三方的特定的库去处理:

【整理】关于用正则表达式处理html代码方面的建议

其中:

Python:相关用于解析html的库,推荐用:

【总结】Python的第三方库BeautifulSoup的使用心得

 

关于代码示例演示方面,根据之前的三大类需求,有三大类系列的教程:

4.1想要从某静态网页中,提取某些内容

4.1.2 C#版

【教程】抓取网并提取网页中所需要的信息 之 C#版

4.2想要抓取某些动态网页中的某些内容

此处,目前已有的教程,是从头开始解释整个过程的:

【教程】如何抓取动态网页内容

然后解释之前所介绍的,如何用工具分析的:

【教程】以抓取网易博客帖子中的最近读者信息为例,手把手教你如何抓取动态网页中的内容

关于代码实现,等以后会更新的。

但是,其实,相关的代码,去参考别的,静态网页内容提取,模拟登陆方面的代码,也都是可以的。

4.3想要模拟登陆某个网站

4.3.2 C#版
【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)

5 总结

总之,做任何事情,都是先要搞懂逻辑,然后才是如何实现。

希望这里把逻辑和实现,都解释清楚了。




本文转载自:在路上 - on the way - 走别人没走过的路,让别人有路可走


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值