1、什么是爬虫?
就是一段自动获取互联网数据的程序
2.、爬虫有什么用途?
搜索引擎
比价工具(慧慧购物助手)
大的咨询网站(jobbole,今日头条、、、)
网站的三大特性:
1、 每一个资源都有一个url(统一资源定位符),是唯一的
2、网页都是HTML(超文本)文本展示数据的
3、 通过HTTP/HTTPS(超文本传输协议),获取和传递HTML
3、如何实现一个爬虫?
1. 找到目标url
2. 根据url 发起请求
3. 解析相应结果:
a. 提取目标数据
b. 如何存在新的url. 将进一步提取(会执行1-3 这个循环)
4. 爬虫结束:所有符合条件的url 请求全部 获取完毕。意味着爬虫结束
4、为什么要使用python 做爬虫?
PHP, java , c/c++ , python .....
PHP:可以用来做爬虫,但是对多任务的支持不是太好,爬虫是对象要求比较高的,
所以说PHP 天生不是干这个事情的。
JAVA: 生态圈很完善。 并且用途非常广泛(后端,移动端、、)java做爬虫是python 最大的竞争对手,
但是java 代码量比较大,重构的成本比较高
c/c++: 肯定是可以完成爬虫这件事的,并运行的效率是非常高的 , 但是学习的门槛非常高,
各个模块可能需要你自己封装和定制,(能使用C/C++的人 一般比较牛!)
python:语法简介, 代码优美,可读性高,并且对各个模块的支持比较好, 有很多强大的三方包 对多任务的处理也比较好,
urllib,request,的都能够很好的帮助我们是想一个爬虫项目 解析的库也非常多(lxml,bs4,pyquery...)
并且还有强大的scrapy 爬虫框架和scrapy_redis分布式爬虫框架,
并且python 作为一门胶水语言,对于其他语言的调度也是非常方便的,
爬虫分为两类:
通用爬虫:通用爬虫是浏览器的重要组成部分,将互联网上所有的网页下载到本地,
做了一个镜像备份,提取重要数据(过滤数据,分词,去广告等等...)
步骤其实跟上面介绍的类似
搜索引擎的爬取的url通过什么方式获取的??
- 通过网站的外链
- 通过网页提交url: (百度http://zhanzhang.baidu.com/linksubmit/url)
- 各大搜索引擎公司也会和DNS 服务商合作
DNS : 将我们的域名转化为ip 的一种技术
通用爬虫(搜索引擎)的缺点:
- 需要遵循robots协议:(也叫爬虫协议、机器人协议等),全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,
- 搜索引擎返回的结果千篇一律 没有很好的针对性,不能够得数的用户群体返回对应的数据,
- 搜索引擎一般情况下获取的是文本信息 ,处理图像,音频,视频多媒体还是有困难的,
聚焦爬虫:是面向主题的爬虫,由需求产生的 是一种定向爬虫,在爬取网页数据的时候,
会对网页数据进行一些赛选,保证只抓取和需求相关的数据,以后我们更多的就是实现聚焦爬虫。
做爬虫需要掌握哪些基本知识??
- python 的基本语法
- 前端知识 HTML
- 数据持久化的知识
- 了解基本的反爬虫 手段(header请求头,验证码,cookies,代理)
- 静态页面和动态页面(ajax,js)selenium (获取的页面源码是经过浏览器渲染之后的最终结果)
- 多任务处理,爬虫框架,分布式爬虫等等
HTTP: 超文本传输协议,主要是用来将html文本传输到本地浏览器
HTTPS:作用和HTTP一致,只是多了SSL (安全套接字层)保证数据传输的安全性
1. 建立一个安全有效的数据传输通道,保证数据的安全性
2. 保证网站的真实性和有效性
url的组成部分:
- scheme:协议
2、host:指的是域名或者IP - port:端口
4.path: 资源路径 - query-string:请求的参数
6.anchor: 锚点 只要实现页面的定位作用
请求头:
User-Agent: 模拟浏览器加载
Cookies: 携带cookies第一可以维持会话,可以告诉浏览器用户的身份信息
Refere: 告诉浏览器 当前请求 是从哪个页面发起的。
常见的状态码:
2xx:表示服务器成功接收请求并已完成整个处理过程。
200(OK 请求成功)。
3xx:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、 常用
301: 永久重定向
302:临时重定向(所请求的页面已经临时转移至新的url)
4xx:客户端的请求有错误.
400:错误请求,服务器无法解析请求
401:未授权,没有进行身份验证
403:服务器拒绝访问
404:服务器无法找到被请求的网页
408:请求超时
5xx:服务器端出现错误
500:服务器内部错误
501:服务器不具备完成请求的功能
503:服务器不可用
urllib库的基本使用
request: 它是最基本的HTTP请求模块,可以用来模拟发送请求,就像在浏览器中输入网址,
然后敲击回车键一样,使用的时候只需要给库方法传入相关的URL和相关的参数即可.
error: 异常处理模块,如果出现请求错误,我们可以使用这个模块来捕获异常,
然后进行重试或者其他操作,保证程序不会意外终止.
parse: 这是一个工具模块,提供了许多url的处理方法,比如拆分,解析,合并等等.
使用urlencode方法可以将字典类型的参数 转换为url编码的字符串
特别注意:如果发去的get 请求参数中包含中文 一定要使用urlencode进行编码
unquote :将编码的参数 转换为正常的中文
User-Agent : 设置默认浏览器
url:设置目标url
data=None : 默认为None 表示是一个get 请求 如果部位None 表示是一个Post请求
timeout:用于设置超时时间,单位为秒
cafile =None 可以指定证书文件 (一般情况下用不到这个参数)
capath = None : 指明证书路径
cadefault = False: 是否要使用默认的证书
context = None : 赋值则表示忽略未认证的ssl 证书
网友评论