你了解爬虫是什么吗?你知道爬虫的爬取流程吗?你知道怎么处理爬取中出现的问题吗?若是你回答不出来,或许你真的要好好看看这篇文章了!css
爬虫简介python
网络爬虫(Web crawler),是一种按照必定的规则,自动地抓取万维网信息的程序或者脚本,它们被普遍用于互联网搜索引擎或其余相似网站,能够自动采集全部其可以访问到的页面内容,以获取或更新这些网站的内容和检索方式。从功能上来说,爬虫通常分为数据采集,处理,储存三个部分。传统爬虫从一个或若干初始网页的URL开始,得到初始网页上的URL,在抓取网页的过程当中,不断从当前页面上抽取新的URL放入队列,直到知足系统的必定中止条件。聚焦爬虫的工做流程较为复杂,须要根据必定的网页分析算法过滤与主题无关的连接,保留有用的连接并将其放入等待抓取的URL队列。而后,它将根据必定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时中止。另外,全部被爬虫抓取的网页将会被系统存贮,进行必定的分析、过滤,并创建索引,以便以后的查询和检索;对于聚焦爬虫来讲,这一过程所获得的分析结果还可能对之后的抓取过程给出反馈和指导。web
爬虫原理正则表达式
Web网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据来源。不少大型的网络搜索引擎系统都被称为基于 Web数据采集的搜索引擎系统,好比 Google、Baidu。因而可知Web 网络爬虫系统在搜索引擎中的重要性。网页中除了包含供用户阅读的文字信息外,还包含一些超连接信息。Web网络爬虫系统正是经过网页中的超链接信息不断得到网络上的其它网页。正是由于这种采集过程像一个爬虫或者蜘蛛在网络上漫游,因此它才被称为网络爬虫系统或者网络蜘蛛系统,在英文中称为Spider或者Crawler。算法
爬虫基本流程数据库
发起请求:经过HTTP库向目标站点发起请求,即发送一个Request,请求能够包含额外的headers等信息,等待服务器响应。django
获取响应内容:若是服务器能正常响应,会获得一个Response,Response的内容即是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。浏览器
解析内容:获得的内容多是HTML,能够用正则表达式、网页解析库进行解析。多是Json,能够直接转为Json对象解析,多是二进制数据,能够作保存或者进一步的处理。服务器
保存数据:保存形式多样,能够存为文本,也能够保存至数据库,或者保存特定格式的文件。网络
Request和Response
Request:浏览器就发送消息给该网址所在的服务器,这个过程叫作HTTP Request。
Response:服务器收到浏览器发送的消息后,可以根据浏览器发送消息的内容,作相应处理,而后把消息回传给浏览器。这个过程叫作HTTP Response。浏览器收到服务器的Response信息后,会对信息进行相应处理,而后展现。
Request详解
请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等均可以用URL惟一来肯定。
请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
请求体:请求时额外携带的数据如表单提交时的表单数据。
Response详解
响应状态:有多种响应状态,如200表明成功、301跳转、404找不到页面、502服务器错误。
响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。
响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。
能抓取哪些数据
网页文本:如HTML文档、Json格式文本等。
图片:获取到的是二进制文件,保存为图片格式。
视频:同为二进制文件,保存为视频格式便可。
And so on:只要是能请求到的,都能获取。
解析方式
直接处理
Json解析
正则表达式
BeautifulSoup
PyQuery
XPath
对Python感兴趣或者是正在学习的小伙伴,能够加入咱们的Python学习扣qun:784758214,从0基础的python脚本到web开发、爬虫、django、数据挖掘数据分析等,0基础到项目实战的资料都有整理。送给每一位python的小伙伴!每晚分享一些学习的方法和须要注意的小细节
抓取中出现的问题
问:为何我抓到的和浏览器看到的不同?
答:网页经过浏览器的解析,加载CSS与JS等文件对网页进行解析渲染,达到咱们看到绚丽的网页,而咱们抓到的文件只是一些代码,css文件没法调用,使得样式不能表现出来,那么网页就会出现错位等等问题。
问:怎样解决JavaScript渲染的问题?
答:分析Ajax请求、Selenium/WebDriver、Splash、PyV八、Ghost.py等库
保存数据
文本:纯文本、Json、Xml等。
关系型数据库:如MySQL、Oracle、SQL Server等具备结构化表结构形式存储。
非关系型数据库:如MongoDB、Redis等Key-Value形式存储。
二进制文件:如图片、视频、音频等等直接保存成特定格式便可。
以上就是本文的所有内容,但愿对您有所帮助!