老司机带你学爬虫——Python爬虫技术分享

优采云 发布时间: 2020-05-06 08:01

  什么是“爬虫”?

  简单来说,写一个从web上获取须要数据并按规定格式储存的程序就叫爬虫;

  爬虫理论上步骤很简单,第一步获取html源码,第二步剖析html并领到数据。但实际操作,老麻烦了~

  用Python写“爬虫”有什么便捷的库

  常用网路恳求库:requests、urllib、urllib2、

  urllib和urllib2是Python自带模块,requests是第三方库

  常用解析库和爬虫框架:BeautifulSoup、lxml、HTMLParser、selenium、Scrapy

  HTMLParser是Python自带模块;

  BeautifulSoup可以将html解析成Python句型对象,直接操作对象会十分便捷;

  lxml可以解析xml和html标签语言,优点是速度快;

  selenium调用浏览器的driver,通过这个库你可以直接调用浏览器完成个别操作,比如输入验证码;

  Scrapy太强悍且有名的爬虫框架,可以轻松满足简单网站的爬取;这个python学习(q-u-n):二二七,四三五,四五零 期待你们一起交流讨论,讲实话还是一个特别适宜学习的地方的。软件各类入门资料

  “爬虫”需要把握什么知识

  1)超文本传输协议HTTP:HTTP合同定义了浏览器如何向万维网服务器恳求万维网文档,以及服务器如何把文档传送给浏览器。常用的HTTP方式有GET、POST、PUT、DELETE。

  【插曲:某站长做了一个网站,奇葩的他把删掉的操作绑定在GET恳求上。百度或则微软爬虫爬取网站链接,都是用的GET恳求,而且通常用浏览器访问网页都是GET恳求。在微软爬虫爬取他网站的信息时,该网站自动删掉了数据库的全部数据】

  2)统一资源定位符URL: URL是拿来表示从因特网上得到的资源位置和访问那些资源的方式。URL给资源的位置提供一种具象的辨识方式,并用这些方式给资源定位。只要才能对资源定位,系统就可以对资源进行各类操作,如存取、更新、替换和查找其属性。URL相当于一个文件名在网路范围的扩充。

  3)超文本标记语言HTTP:HTML指的是超文本标记语言,是使用标记标签来描述网页的。HTML文档包含HTML标签和纯文本,也称为网页。Web 浏览器的作用是读取 HTML 文档,并以网页的方式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。简而言之就是你要懂点后端语言,这样描述更直观贴切。

  4)浏览器调试功能:学爬虫就是抓包,对恳求和响应进行剖析,用代码来模拟

  进阶爬虫

  熟练了基本爬虫以后,你会想着获取更多的数据,抓取更难的网站,然后你才会发觉获取数据并不简单,而且现今反爬机制也十分的多。

  a.爬取知乎、简书,需要登入并将上次的恳求时将sessions带上,保持登入姿态;

  b.爬取亚马逊、京东、天猫等商品信息,由于信息量大、反爬机制建立,需要分布式【这里就难了】爬取,以及不断切换USER_AGENT和代理IP;

  c.滑动或下拉加载和同一url加载不同数据时,涉及ajax的异步加载。这里可以有简单的返回html代码、或者json数据,也可能有更变态的返回js代码之后用浏览器执行,逻辑上很简单、但是写代码那叫一个苦哇;

  d.还有点是须要面对的,验证码识别。这个有专门解析验证码的平台.....不属于爬虫范畴了,自己处理须要更多的数据剖析知识。

  e.数据存储,关系数据库和非关系数据库的选择和使用,设计防冗余数据库表格,去重。大量数据储存数据库,会显得太难受,

  f.编码解码问题,数据的储存涉及一个格式的问题,python2或则3也就会涉及编码问题。另外网页结构的不规范性,编码格式的不同很容易触发编码异常问题。下图一个简单的转码规则

  

  一些常见的限制形式

  a.Basic Auth:一般会有用户授权的限制,会在headers的Autheration数组里要求加入;

  b.Referer:通常是在访问链接时,必须要带上Referer数组,服务器会进行验证,例如抓取易迅的评论;

  c.User-Agent:会要求真是的设备,如果不加会用编程语言包里自有User-Agent,可以被辨认下来;

  d.Cookie:一般在用户登入或则个别操作后,服务端会在返回包中包含Cookie信息要求浏览器设置Cookie,没有Cookie会很容易被辨认下来是伪造恳求;也有本地通过JS,根据服务端返回的某个信息进行处理生成的加密信息,设置在Cookie上面;

  e.Gzip:请求headers上面带了gzip,返回有时候会是gzip压缩,需要解压;

  f.JavaScript加密操作:一般都是在恳求的数据包内容上面会包含一些被javascript进行加密限制的信息,例如新浪微博会进行SHA1和RSA加密,之前是两次SHA1加密,然后发送的密码和用户名就会被加密;

  g.网站自定义其他数组:因为http的headers可以自定义地段,所以第三方可能会加入了一些自定义的数组名称或则数组值,这也是须要注意的。

  真实的恳求过程中爬虫技术,其实不止里面某一种限制,可能是几种限制组合在一次,比如假如是类似RSA加密的话,可能先恳求服务器得到Cookie,然后再带着Cookie去恳求服务器领到私钥,然后再用js进行加密,再发送数据到服务器。所以弄清楚这其中的原理爬虫技术,并且耐心剖析很重要。

  总结

  爬虫入门不难,但是须要知识面更广和更多的耐心

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线