Scrapy和相关知识
爬虫背景知识:
大数据的时代?数据怎么来的呢?
企业产生的数据:大的公司会根据用户的行为记录数据,数据会被大公司利用
,可以用来做数据的分析
数据平台的数据:
政府和机构的数据:
数据咨询平台的数据:
- 爬虫:以上平台或者机构不能够提供我们需要的数据,
这时就需要爬虫工程师,根据需求从互联网上抓取数据?
什么是爬虫?
就是一段自动抓取互联网数据的程序或脚本
网页的三大特性?:
1.每一个网页都有自己唯一的URL地址(统一资源定位符)
2.网页都是通过HTML(超文本)来展示数据的
3.网页是通过http/https(超文本传输协议)来传输html的
爬虫最基本的步骤?:
1.寻找目标url,发起请求
2.获取请求的响应结果,分析响应结果
3.从响应结果中提取数据
a.第一部分,从网页中提取的目标数据
b.如果存在新的url地址,则提取,继续发起请求
爬虫结束:所有的目标url全部请求完毕,爬虫结束
- 数据的用途:
1.可以爬取数据,写自己的网站
2.搜索引擎
3.购物助手
4.日常数据的基本分析(知乎数据冰山专栏)
做爬虫并不只有python可以完成:
java php c/c++ switch ...
java:是python写爬虫的最大的竞争对手,java的发展周期
长,生态圈都比较完善,也有很多第三方库的支持,java的代
码量比较大,开发的成本比较高,后期维护也比较繁琐.(以后可以去学习了解)
php:php曾经被叫做世界上最好的语言(一般用来后端的),
也可以用来写爬虫,但是对多任务的支持不太好,爬虫对效
率要求比较高,所有一般不适用php写爬虫
c/c++:比较偏向于底层的语言,代码的运行效率高,学习的
门楷非常高,代码成型比较慢.
python:代码简单易懂,并且第三方的库也有很多,python
自带的urllib网络请求模块,requests网络请求模块,网络
解析库xpath,BeautifulSoup4,pyquery等等,还有成熟
高效稳定的爬虫框架scrapy(pyspider)等等,并且还支持
分布式爬虫(scrapy-redis)框架
爬虫的分类(通用爬虫,聚焦爬虫):
- 通用爬虫:是搜索引擎的重要组成部分
作用和目的:尽可能全的将互联网上所有的网页下载到
本地,通过分词,去噪等进行预处理,处理后进行数据的持久化(
镜像备份),然后提取检索系统
获取数据的步骤):
a.获取一些种子url,放入待爬取队列
b.从待爬取队列中取出url发起请求,将获取的响应结果
进行处理,之后存入本地,然后将已爬取的url,放入已爬
取队列
c.从响应结果中获取外链(url),将url放入待爬取队列中
DNS服务:将域名转换为ip的技术
搜索引擎如何获取新网站的url:
1.向搜索引擎直接提交url地址(https://ziyuan.baidu.com/linksubmit/url)
2.通过网页的外链
3.跟DNS服务商合作,新网站注册的域对应的网
站将会迅速被搜索引擎抓取
搜索引擎的排名:
1.根据用户的访问量和网站的流量进行的排名
2.竞价排名:根据价钱进行网站的排名
搜索引擎需要遵守robot协议:
是一个规范,网站通过robot协议告诉搜索引擎哪些页面可以爬取,
哪些页面不可以爬取
https://www.taobao.com/robots.txt
User-agent: Baiduspider(搜索引擎爬虫名称)
Allow: /article (允许爬取的url)
Disallow: /product/ (不允许爬取的url)
搜索引擎的缺点:
1.只能够获取简单的文件数据,大型的二进制数据(音频,视频)
都不能够获取
2.搜索引擎搜索的结果千篇一律,没有办法根据特定的用户,特定的需求
获取特定的数据
3.搜索引擎搜索结果99%并没用
由于搜索引擎的缺点,产生了聚焦爬虫
聚焦爬虫:是面向主题,面向需求的爬虫,只获取跟
需求相关的数据
- OSI七层协议的目的:实现不同的系统互联之间的数据通讯,
实现数据的传输. - 七层协议:
应用层 表示层 会话程 传输层 网络层 数据链路层 物理层
应用层:http/https
传输层:TCP/UDP
TCP:网络传输协议,面向连接的,长连接,传输的是数据流
,确保数据的安全性和完整性,但是数据传输的效率低
UDP:网络传输协议,是非面向连接的,短连接,传输的是数据包,
传输数据是不安全的,可能会造成数据的丢失,传输速度非常快
- http(超文本传输协议,端口号是80):
实现从网络传输草文本数据到本地浏览器的传送协议
https(端口号是443):是http的安全版本,在http的基础上添加了一个
SSL(安全套接字层)层,用于web端的安全传送,在传输层
对网络连接进行加密,
1.构建了一个安全的数据传输通道.
2.保证网站的真实性和有效性
https协议需要有一个证书(CA证书):由专门的证书机构颁发的,
也可以自己生成,但是访问的时候会提示连接不安全
- http的工作原理:
URL介绍:
URI:统一资源标志符
URN:统一资源名称
URL:统一资源定位符
URI是URN和URL的父类
-
URL的组成部分:
https://baike.baidu.com/item/OSI/5520?fr=aladdin
https://book.qidian.com/info/1004608738
https://book.qidian.com/info/1004608738#Catalog
scheme:指的是协议(https/http)
host:值得是服务器的ip或者域名
port:指的是端口号
path:资源路径
query_string:url地址后面的查询参数
anchor(锚点):可以指定要跳转的位置
请求的方式都是基于http1.1的版本
get:只是用于从服务器获取数据,再url连接后面
可能会跟一些查询参数
post:向服务器端提交数据,数据会放在请求体中,
一般用于添加或者修改数据
delete:用来删除数据
put:更新整个资源(用来做数据的更新)
patch:(更新资源)(局部数据的更新) -
对比:get和post请求的区别
1.使用场景:get从服务器端获取数据,post请求向服务器端提交数据
2.安全性:get请求参数只拼接在url地址上,post请求会将参数放在
请求体中,(注意:不要误认为只要url地址后面添加了参数就是一个get请求)
3.get请求的url是有长度限制的,post的请求体中可以添加很多字段
- 常见的请求头参数:
User-Agent:这个是设置浏览器
(设置这个参数模拟浏览器请求对方服务器)
Cookie:保存在客户端中,保存的是用户信息
Referer:告诉服务器,当前请求是从哪个界面跳转过来的(防盗链)
Accept:可以接受的数据类型....
- Cookie和Session:目的保持会话
http请求是无状态的,每一次请求断开后,下一次请求就
认为是一个新的请求,为了维持请求状态就用到了Cookie
和Session
Cookie:保存在客户端的,记录信息确定用户的身份
Session:保存在服务端的,同样是记录信息确定用户身份
- 常见的请求状态码:
200:请求成功
3xx:重定向
301:永久重定向
302:临时重定向
4xx:客户端请求错误
400:请求错误,服务器无法解析
401:未授权,没有进行身份验证
403:服务器拒绝访问
404:访问的页面不存在
405:请求方式不允许
408:请求超时 5xx:服务端错误
500:服务端内部错误
501:服务器暂时不具备完成请求的功能
503:服务器不可用