您的位置:首页 > 编程语言 > Python开发

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

2014-05-15 10:41 966 查看
http://www.crifan.com/how_to_use_some_language_python_csharp_to_implement_crawl_website_extract_dynamic_webpage_content_emulate_login_website/


背景

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

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

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

想要模拟登陆某个网站

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

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


搞懂访问网页所涉及的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等)的解释


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

简单的说就是,你自己所要处理的某个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歌曲的真实地址


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

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

提示:

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

1. url地址的编码和解码

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

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

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

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

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

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

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

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

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

其中:

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

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

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


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


Python版

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


C#版

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


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

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

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

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

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

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

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


想要模拟登陆某个网站


Python版

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


C#版

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


总结

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

希望这里把逻辑和实现,都解释清楚了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐