零基础的爬虫童靴们,一招让你了解爬虫的学习之路

2020-03-27  本文已影响0人  Python大数据工程师

爬虫是什么?

网络爬虫为搜索引擎从万维网下载网页。一般分为传统爬虫聚焦爬虫

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。通俗的讲,也就是通过源码解析来获得想要的内容。

聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

防爬虫:KS-WAF将爬虫行为分为搜索引擎爬虫及扫描程序爬虫,可屏蔽特定的搜索引擎爬虫节省带宽和性能,也可屏蔽扫描程序爬虫,避免网站被恶意抓取页面。

(图片来自网络配图)

基础知识

基础语法是必须的,只需要看看视频,百度百度,学习一下简单的语法就可以,有其他语言基础的话事半功倍,其他的也可以在实战中慢慢掌握。

简单网站爬取

首先可以入手一下比较简单的静态网站,爬取一些文字,图片等数据,比如豆瓣、糗事百科、腾讯新闻,知乎等

大部分爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。

其中需要掌握的请求库有urllib、requests;解析库有Xpath(lxml)、BeautifulSoup(bs4)以及正则表达式,存储可以有文本存储

特殊网站爬取

学习一些特殊网站的爬取

比如登录、Cookie、动态网页等问题

掌握反爬技巧

掌握各种技巧,应对特殊网站的反爬措施

比如利用时间间隔、代理IP池、抓包、验证码的OCR处理等

数据存储

学习数据库基础,应对大规模数据存储

爬回来的数据量小的时候,你可以用文档的形式来存储,一旦数据量大了,这就有点行不通了。所以掌握一种数据库是必须的,学习目前比较主流的 MongoDB 就OK。

MongoDB 可以方便你去存储一些非结构化的数据,比如各种评论的文本,图片的链接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。

因为这里要用到的数据库知识其实非常简单,主要是数据如何入库、如何进行提取,在需要的时候再学习就行。

爬虫框架

学习爬虫的框架,Scrapy、PySpider等

分布式爬虫

爬取基本数据已经不是问题了,你的瓶颈会集中到爬取海量数据的效率。这个时候,相信你会很自然地接触到一个很厉害的名字:分布式爬虫。

分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,基本的掌握 Scrapy + MongoDB + Redis 这三种工具。

Scrapy 前面我们说过了,用于做基本的页面爬取,MongoDB 用于存储爬取的数据,Redis 则用来存储要爬取的网页队列,也就是任务队列。

(图片来自网络配图)

网络爬虫的前景如何

爬虫的行业前景怎么样呢?这个是大家比较关心的问题,下面是北京爬虫实习生的待遇

(图片来自网络配图)

看到图可想而知,实习生的薪资都已经大部分保持在20-30k如果是资历尚高和技术人员薪资那就不用我来说吧!之前在网络看到这么个短视频:的当程序员的第一年自行车,第二年电动车,第三年小轿车,第四年奥迪,第五年卡迪拉克,第七年救护车。


15秒带你过完程序员的一生,实在是太秃然了,程序员:我可真是太难了

爬虫该如何使用

1、简述,Python在爬虫方面有独天得厚的优势,几行代码就可以写出一个简单的爬虫,python有些比较强大的库比如urlib库、Beautiful库、scrapy框架都非常好用。

一个简单爬虫

通过简单的两行代码,就可以把整个网站的内容全部抓取出来,浏览器可以解释成格式化美观的显示效果,不过上段程序是整个数据都抓取出来。

2、复杂的爬虫

网页请求一般比较复杂,大多都需要添加参数,有的网页还需要登陆或者验证码才能访问。网络请求的数据传送方式分为Post 和 Get两种常见方式,当然还有PUT 、Delete等方式,这里主要是前面两种。

Post :

urlopen(url,data,timeout):urlopen有三个参数,第一个是url地址,第二个data是访问url地址时需要传递的参数,第三个是设置的超时的时间,当post请求需要参数的时候,就需要带上第二个参数,

Get:

get方式就比较简单,也没有post那么安全,get参数直接附加在url后面:

这就是通过urlib爬去普通页面,以及简单的post 、get网络爬取方式,当然爬取没那么简单,还需要一些其它的设置,比如设置header,或者其它方面的参数设置。

3、更高级的爬虫

许多网站对爬虫做了许多限制,知道你是伪装的程序抓取而不是浏览器进行正常的浏览访问,所以有时候需要伪装成浏览器进行抓取,这就需要进行其它设置,

比如说HTTP 首部的设置,Http header常见承载用户的其中首部,from,User-Agent,Referer 、Authorization、Client -IP ,X-forwarded-for cookie等

a设置headers,agent,代表着请求的身份,代表这是浏览器进行访问:

上面加入了header,header中的User-agent 指名了用户的浏览器,这就是用代码设置header中的agent伪装浏览器进行访问

Referer,提供了用户来源页面的URL,用来表示用户之前访问了哪个页面,服务器有时会识别referer是不是来源他自己,用来防盗链。

我们可以这样设置:

user_agent=''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11"

headers= {'User-Agent':user_agent,“referer”:"wwww.myweb.com"}

其它属性

Content-Type:使用Rest接口时,服务器会检查该值,用来确定HTTP Body中的内容该怎么解析

application/xml:在XML RPC,如RESTful/SOAP调用时,使用

application/json:在JSON RPC调用时使用

application/x-www-form-urlencoded:浏览器提交Web表单时使用

其中注意的是,在访问RESTful或SOAP服务时,Content-Type设置错误会导致服务器拒绝服务

b、代理的设置

为什么要设置代理了,因为许多时候服务器经常会防爬虫,禁止某个IP的访问次数,这时候我们可以通过设置代理,不停的换ip,迷惑服务器

3、Timeout设置

异常处理:

from urllib.request import urlopen

try:

urllib.urlopen("http://www.xxxx.com")

except urllib.HTTPError,e:

print e.code

except urllib.URLError,e:

print e.reason

HTTPError是URLError的子集,所以把URLError放在后面,这也是编程的小技巧

(关注小编持续推出相关内容,私信小编即可获取java相关资料)

上一篇下一篇

猜你喜欢

热点阅读