最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

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

Crawl_EmulateLogin crifan 12055浏览 0评论

背景

在网络,网页,网站处理方面,很多人都遇到过,想要用某种语言(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#版(内含两种版本的完整的可运行的代码)

     

    总结

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

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

    转载请注明:在路上 » 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站

    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址

    网友最新评论 (19)

    1. 这博客里的各种链接跳转看瞎我了
      Inm5年前 (2019-09-23)回复
    2. seo鬼才
      一个路过的阿童木5年前 (2019-06-15)回复
    3. 看的眼花缭乱的 各种什么链接跳来跳去 迷
      菠萝7年前 (2017-08-10)回复
    4. 谢谢。想抓取动态网页的数据,已经烦恼好多天了,感觉糟糕透了,谢谢您的分享。
      lynn8年前 (2016-03-24)回复
    5. 确实写得很垃圾,不去看看别人的博客怎么写的,完全就是为了自己网站的seo,而不是好好地写下技术,讲得详细有个鸟用?乱起八糟的链接看得眼花缭乱,博主这种人能做技术也是醉了。
      走自己的路9年前 (2015-11-02)回复
    6. 感谢作者的辛勤创作。写的很细致~非常适合学习
      Bokai9年前 (2015-09-21)回复
    7. 每次看到你的博客 一肚子气,唧唧歪歪一大堆~~根本不是为了解决问题写的文章,完全是为了seo来写文章,垃圾体验~
      兔牙9年前 (2015-06-29)回复
    8. 感谢分享!先学习下。
      Arjame9年前 (2015-01-28)回复
    9. 感谢分享~~
      Nero10年前 (2014-05-26)回复
    10. 对于互联网知识的分享表示支持和感谢!~ 哈哈,拿去用了
      kantianqi10年前 (2014-01-14)回复
    11. 怎么联系楼主呢,很想学啊···python初学,不知道该怎么入手
      panp10年前 (2013-11-30)回复
      • https://www.crifan.com/about/me/
        crifan10年前 (2013-12-02)回复
    12. 教程通俗易懂 ,而且又完整,适合新手、适合各种学习对象,谢谢分享,不过就是太多的链接穿插在其中,乱了点,要是博主能整理下,搞个http专题系列就好了,呵呵。支持一下
      学习11年前 (2013-07-16)回复
    13. 只是想学习一下抓取网页的一些问题,但看博主的文章头都晕,结构太零散了,给着一堆的链接,到底从哪看起?还不如写个123456这样标识更清楚,对吧
      学习11年前 (2013-07-16)回复
      • 同意。所以,我才将内容分类,根据标题而分列成不同章节,才有第一章,第二章之类的。
        crifan11年前 (2013-07-16)回复
    14. 太好了,研究好久没找到方向,在这里找到了。不明白的地方可以问你吗?
      four511年前 (2012-12-08)回复
    87 queries in 0.180 seconds, using 22.18MB memory