Python爬虫原理

1. 什么是爬虫,爬虫的本质是什么?

网络爬虫Web Spider,是按照一定的规则,自动地抓取互联网上的信息的程序,本质就是一个程序或者脚本。(把网络比喻成一个蜘蛛网,爬虫就是一只在网上爬来爬去的蜘蛛)
爬虫本质上只做了两件事情:请求和解析

2. 爬虫工作原理

模拟浏览器打开网页,获取网页中我们想要的那部分数据。
当你在浏览器中输入地址后,经过DNS服务器找到服务器主机,向服务器发送一个请求,服务器经过解析后发送给用户浏览器结果,包括html,js,css等文件内容,所以用户看到的浏览器的结果就是由HTML代码构成的,我们爬虫就是为了获取这些内容,通过分析和过滤html代码,从中获取我们想要资源(文本,图片,视频…)
所以爬虫本质上只做了两件事情:请求和解析,但是爬虫的开发是非常困难的,需要不停的分析网站的请求,不停的跟随目标网站来升级自己的程序,试探解密、破解目标网站限制

3.爬虫的基本框架

爬虫基本框架由管理器、 下载器 、 解析器构成
管理器:管理待抓取的url集合和已抓取的url集合,防止重复和循环抓取
(添加新的url到待抓取集合,判断是否还有待抓取url,获取待抓取的url,判断待添加url是否在已抓取,将url从待抓取移动到已抓取)
下载器:将url对应的网页下载到本地的工具
(python有两种下载器:python官方基础模板urllib2;第三方包requests)
解析器:从url对应的网页中提取有价值的信息
(python有模糊解析器:re正则表达式;结构化解析:html.parser,Beautiful Soup,lxml)
结构化解析DOM(Document Object Model)树
在这里插入图片描述

3. 编写爬虫的基本步骤?

第一步:HTTP请求

  1. 请求头(Request Headers):包装了http请求的基本信息,比较重要的如:user-agent、referer、cookie、accept-language(接受语言)、请求方法(post、get)。
  2. 响应头(Response Headers):包装了服务器返回的头信息,如content-language内容语言、content-type内容的类型text/html等 、server服务器类型(tomcat、jetty、nginx等)、status响应状态(如:200、302、404等等)。
  3. Response:服务端具体的返回,类型多种多样,有html页面、js代码、json串、css样式、流等等。

第二步:解析
通常情况下,web返回的基本都是html页面、json。

  1. xpath,
    xml路径语言,具备很强的解析能力,chrome、firefox都有对应的工具生成xpath语法,可以很方便的对标准html文件进行解析。
  2. jsonpath,
    jsonpath是一个json解析的利器,非常类似于xpath语法,用非常简洁的表达式解析json格式的数据
  3. css选择器
    这里的css选择器和jquery有点类似,通过元素的css样式来定位元素,大名鼎鼎的jsoup提供丰富的css选择器,解析html数据
  4. re正则表达式
  5. 字符串分割
    pandas:用于分析数据
    sqlite3: 轻量级数据库

4.难点分析

分析请求
ajax的普及,很多网站都采用了动态渲染的模式,请求不再是简单的返回html的模式,那么给爬取带来了巨大的难度,一般只能靠分析异步请求返回的json来具体分析,解析成我们需要的数据格式。还有一类是通过服务端内部转发来渲染页面,这类是最难的,请求不是通过浏览器来请求,而是再服务端跳转几次才渲染给浏览器,这时候需要使用模拟器来模拟请求,如selenium等。
网站的限制

  1. cookie限制:很多网站是要登陆后才能绕过filter才能访问,这时候必须模拟cookie
  2. user-agent:有的网站为了防爬虫,必须要求是真正浏览器才能访问,这时候可以模拟user-agent
  3. 请求加密:网站的请求如果加密过,那就看不清请求的本来面目,这时候只能靠猜测,通常加密会采用简单的编码,如:base64、urlEncode等,如果过于复杂,只能穷尽的去尝试
  4. IP限制:有些网站,会对爬虫ip进行限制,这时候要么换ip,要么伪装ip
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值