5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 。
另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下 。

5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入:http://www.baidu.com/,你就会看到百度首页 。
简单来说这段过程发生了以下4个步骤:
  • 查找域名对应的IP地址 。
  • 向IP对应的服务器发送请求 。
  • 服务器响应请求,发回网页内容 。
  • 浏览器解析网页内容 。
网络爬虫要做的,简单来说,就是实现浏览器的功能 。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取 。
抓取这一步,你要明确要得到的内容是什么?是html源码,还是Json格式的字符串等 。
最基本的抓取
抓取大多数情况属于get请求,即直接从对方服务器上获取数据 。
首先,Python中自带urllib及urllib2这两个模块,基本上能满足一般的页面抓取 。另外,requests也是非常有用的包,与此类似的,还有httplib2等等 。
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
此外,对于带有查询字段的url,get请求一般会将来请求的数据附在url之后,以?分割url和传输数据,多个参数用&连接 。
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
对于登陆情况的处理
1、使用表单登陆
这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地 。
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
2、使用cookie登陆
使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容 。因此,需要验证码的情况可以使用带验证码登陆的cookie解决 。
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
若存在验证码,此时采用response = requests_session.post(url=url_login, data=https://www.isolves.com/it/cxkf/yy/Python/2019-11-28/data)是不行的,做法应该如下:
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
对于反爬虫机制的处理
1、使用代理
适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况 。
这种情况最好的办法就是维护一个代理IP池,网上有很多免费的代理IP,良莠不齐,可以通过筛选找到能用的 。对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉 。
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
2、时间设置
适用情况:限制频率情况 。
Requests,Urllib2都可以使用time库的sleep()函数:
import timetime.sleep(1)3、伪装成浏览器,或者反“反盗链”
有些网站会检查你是不是真的浏览器访问,还是机器自动访问的 。这种情况,加上User-Agent,表明你是浏览器访问即可 。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer 。
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
对于断线重连
不多说
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
或者
5分钟带你深入了解Python爬虫,你会发现爬虫其实没有那么难

文章插图
 
这样我们就可以使用multi_session或multi_open对爬虫抓取的session或opener进行保持 。
多进程抓取
这里针对华尔街见闻进行并行抓取的实验对比:Python多进程抓取 与 JAVA单线程和多线程抓取 。
 
对于Ajax请求的处理
对于“加载更多”情况,使用Ajax来传输很多数据 。
它的工作原理是:从网页的url加载网页的源代码之后,会在浏览器里执行JavaScript程序 。这些程序会加载更多的内容,“填充”到网页里 。这就是为什么如果你直接去爬网页本身的url,你会找不到页面的实际内容 。
这里,若使用google Chrome分析”请求“对应的链接(方法:右键→审查元素→Network→清空,点击”加载更多“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程 。


推荐阅读