python爬虫(一)爬虫的认识 + 搜索引擎 + 爬虫分类 + 使用爬虫爬取数据流程 + 爬虫必备知识点(http和https) + hash实现加密文件字符串

一、获取数据的方式,爬虫的必要性


  1. 企业生产的用户数据:大型互联网公司有海量用户,所以他们积累数据有天然优势,有数据意识的中小型企业,也开始积累的数据。

  2. 数据管理咨询公司:艾瑞,埃森哲等。通常这样的公司有很庞大的数据采集团队,一般会通过市场调研、问卷调查、固定的样本监测、和各行各业公司进行合作、专家对话(数据积累很多年了,最后得出科研结果)来采集数据。

  3. 政府/机构提供的公开数据:政府一般通过各地政府统计上报的数据进行合并;机构都是权威的第三方网站。

  4. 第三方数据平台购买数据:贵阳大数据交易平台,数据堂,淘宝等。通过各个数据交易平台来购买各行各业需要的数据,根据获取难度不同,价格也会不同。

  5. 爬虫爬取数据:如果市场上没有我们需要的数据,或者价格太高不愿意买,那么就可以招/做一个爬虫工程师,从互联网定向采集数据。


二、爬虫的定义 分类 流程 搜索引擎


1. 网络爬虫的定义:


一个程序脚本--->自动的抓取互联网上信息的脚本

2. 爬虫可以解决的问题:


  • 解决冷启动问题。
  • 搜索引擎的根基:做搜索引擎少不了爬虫。
  • 建立知识图谱,帮助建立机器学习知识图谱。
  • 可以制作各种商品的比价软件,趋势分析。
  • 其他:比如分析淘宝上竞争对手的数据;分析微博的数据传递影响力;分析人与人之间的关系等。

3. 爬虫工程师的进阶之路


  • 初级爬虫工程师

    1. web 前端的知识: HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
    2. 正则表达式, 能提取正常一般网页中想要的信息,比如某些特殊的文字, 链接信息, 知道什么是懒惰, 什么是贪婪型的正则;
    3. 会使用 XPath 等获取一些DOM 结构中的节点信息;
    4. 知道什么是深度优先, 广度优先的抓取算法, 及实践中的使用规则;
    5. 能分析简单网站的结构, 会使用urllib或requests 库进行简单的数据抓取。
  • 中级爬虫工程师

    1. 了解什么事HASH,会简单地使用MD5,SHA1等算法对数据进行HASH一遍存储
    2. 熟悉HTTP,HTTPS协议的基础知识,了解GET,POST方法,了解HTTP头中的信息,包括返回状态码,编码,user-agent,cookie,session等
    3. 能设置user-agent进行数据爬取,设置代理等
    4. 知道什么事Request,什么事response,会使用Fiddler等工具抓取及分析简单地网络数据包;对于动态爬虫,要学会分析ajax请求,模拟制造post数据包请求,抓取客户端session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
    5. 对于一些难搞定的网站学会使用phantomjs+selenium抓取一些动态网页信息
    6. 并发下载,通过并行下载加速数据爬取;多线程的使用。
  • 高级爬虫工程师

    1. 能够使用Tesseract,百度AI,HOG+SVM,CNN等库进行验证码识别。
    2. 能使用数据挖掘技术,分类算法等避免死链。
    3. 会使用常用的数据库进行数据存储,查询。比如mongoDB,redis;学习如何通过缓存避免重复下载的问题。
    4. 能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁IP封禁等。
      能使用一些开源框架scrapy,scrapy-redis等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。

4. 爬虫的分类


① 通用爬虫:

就是将互联网上页面整体的内容爬取下来之后,保存到本地。

  • 通用爬虫要想爬取网页,需要网站的url.但是搜索引擎是可以搜索所有网页的。那么通用爬虫url就要涉及到所有网页,这个‘所有’是如何做到的。
    • 新网站向搜索引擎主动提交网址
    • 在其他网站上设置新网站外链。
    • 搜索引擎和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。

②聚焦爬虫:

聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。


5. 爬虫的流程


在这里插入图片描述

  • 向起始url发送请求,并获取响应
  • 对响应进行提取
  • 如果提取url,则继续发送请求获取响应
  • 如果提取数据,则将数据进行保存

6. 爬虫如何爬取网页数据


(一)网页三大特征:

  1. 每个网页都有自己唯一的URL(统一资源定位符)来进行定位。

  2. 网页都使用HTML(超文本标记语言)来描述页面信息。

  3. 网页都使用HTTP/HTTPS (超文本传输协议)协议来传输HTML数据。

(二)爬虫的设计思路

  1. 首先确定需要爬取的网页URL地址。

  2. 通过HTTP/HTTPS协议来获取对应的HTML页面。

  3. 提取HTML页面里有用的数据:

    a.如果是需要的数据,就保存起来。
    
    b.如果是页面里的其他URL,那就继续执行第二步。
    

7. 搜索引擎:


  1. 搜索引擎的工作流程
    第一步:抓取网页
    通过将待爬取的url加入到通用爬虫的url队列中,进行网页内容的爬取
    第二步:数据存储:
    将爬取下来网页保存到本地。这个过程中会有一定的去重操作。如果某个网页的内容大部分重复,搜索引擎可能不会保存。
    第三步:预处理
    提取文字
    中文分词
    消除噪音(比如版权声明文字、导航条、广告等……)
    索引处理
    第四步: 设置网站排名,为用户提供检索服务。

  1. 搜索引擎的局限性(通用爬虫)

    1、搜索引擎只能爬取原网页,但是页面90%内容都是无用的。
    2、搜素引擎不能满足不同行业,不同员的特定需求。
    3、通用搜索引擎只能爬取文字信息,对于视频,文件,音频等其他信息无法爬取。
    4、只能基于关键字查询,无法基于语义查询。


三、爬虫所需知识点


1. 爬虫的准备工作


  1. robots协议

  • 定义:网络爬虫排除标准(全称)
  • 作用:告诉搜索引擎哪些内容可以爬,哪些不能爬

  1. 网站地图sitemap

  • 就是一个网站地图,可以指导我们查看该网页下有哪些内容
    在这里插入图片描述

  1. 估算网站大小

  • 在百度中输入site:www.zhihu.com (site:目标网站网址)

  1. 识别网站用了哪些技术

  • 安装builtwith:pip install builtwith
  • 为了更好的了解网站,抓取该网站的信息,我们可以先了解一下该网站大致所使用的的技术架构。
    • 安装builtwith:pip install bulitwith
    • 使用:在python交互环境下,输入:
      Import buildwith
      Buildwith.parse(‘http://www.sina.com.cn’)
      
      在这里插入图片描述

  1. 寻找网站所有者
    在这里插入图片描述

2. http和https


  1. 什么是http协议
  • http:超文本传输协议(全称)
  • 是一个规范--------------->约束发布和接收html页面的规范

  1. 什么是https协议
  • HTTPS (Hypertext Transfer Protocol over Secure Socket Layer)简单讲是http的安全版,在http下加入SSL层
    在这里插入图片描述

  1. http和https协议的端口号
  • http端口号:80
  • https端口号:443

  1. http协议的特点
  • 是一个应用层协议
  • 无连接(每次连接只处理一个请求)
    • 每次请求都是独立的
    • http 1.1 增加了一个Connection:keep-alive,表示客户端和服务器的连接是一个长连接
  • 无状态
    • 无状态表示客户端每次请求都不能进行请求状态。也就是两条请求之间无法进行通信
    • cookie和session可以帮助记录状态

  1. url:统一资源定位符
  • 为什么可以通过url来定位互联网上的任意资源?

    • http://ip:port/path
      • ip:可以定位一个电脑
      • port:端口号------->用来从互联网上进入电脑
      • path:就是为了在电脑中找到对应的资源路径
  • 有三种特殊符号

    • ?:问号后面就是请求参数
    • &:请求参数用&连接。?username=‘zhangsan’&password=‘123’
    • ·#·:表示锚点,锚点就是在请求这个url时,页面会跳入锚点指定位置
      • 基本格式:scheme://host[:port#]/path/…/?query-string
      scheme:协议(例如:http, http, ftp)
      host:服务器的IP地址或者域名
      port:服务器的端口(如果是走协议默认端口,缺省端口80)
      path:访问资源的路径
      query-string:参数,发送给http服务器的数据
      anchor:锚(跳转到网页的指定锚点位置)
      
  • 在python中,有一个模块可以帮助我们解析url

        代码:
        from urllib import parse
        
        url = 'http://localhost.com:8080/index.htm?username="zhangsan"&password="123"'
        print(parse.urlparse(url))
        
        输入内容:
        ParseResult(
        scheme='http', 
        netloc='localhost.com:8080', 
        path='/index.htm', 
        params='', 
        query='', 
        fragment='')	
    

    在这里插入图片描述


  1. HTTP工作过程
  • 地址解析

    • 将url解析出对应的内容

        scheme:协议(例如:http, http, ftp)
            host:服务器的IP地址或者域名
            port:服务器的端口(如果是走协议默认端口,缺省端口80)
            path:访问资源的路径
            query-string:参数,发送给http服务器的数据
            anchor:锚(跳转到网页的指定锚点位置)
      
  • 封装http请求数据包

    • 将上一步url解析出的内容封装
  • 封装成TCP包,建立TCP连接(TCP三次握手)
    -

  • 客户端发送请求
    -

  • 服务器接收请求,发送响应
    -

  • 服务器关闭TCP连接


3. http请求和浏览器响应


  1. 当我们在浏览器输入一个url,为什么可以加载出一个页面?

  2. 为什么,在抓包的过程中,请求一个url,会出现很多的资源请求

  • 当我们在浏览器输入一个url,客户端会发送这个url对应的一个请求到指定的服务器获取内容
  • 服务器收到这个请求,解析出对应的内容,之后将内容封装到响应里发送给客户端。比如index.html页面
  • 当客户端拿到这个html页面,会查看这个页面中是否有css、js、images等url,如果有,再分别进行请求,获取到这些内容
  • 客户端会通过html的语法,将获取到的内容完美的显示出来
    在这里插入图片描述

4. 客户端请求


  • 组成部分:请求行、请求头部、空行、请求数据
    在这里插入图片描述
    在这里插入图片描述

  • 请求方法get/post

    • get请求:
      • get,获取------->从服务器上获取资源------->通过参数来告诉你服务器获取什么资源------>请求参数是在url里面用&进行拼接的,也就是?后面的内容。------>所以不安全------->传输大小受限(url受限)
    • post请求:
      • post,传递------->向服务器传递数据-------->数据是封装在请求的实体(请求数据)------->可以传递更多的内容(大小不受限)-------->更安全
    • get和post的区别
      • get是从服务器获取内容,post是向服务器传递内容
      • get不安全,因为参数拼在url后面。post比较安全,因为参数是放在实体里面的
      • get传参大小受限,post不受限
  • 重要的请求头
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • User-Agent:客户端请求标识。
      Accept: (传输文件类型)允许传入的文件类型。
      Referer :表明产生请求的网页来自于哪个URL,用户是从该Referer页面访问到当前请求的页面。
      cookie (cookie):在做登录的时候需要封装这个头。
      Content-Type (POST数据类型)
      

5. 服务端响应


  • 组成:状态行、消息报头、空行、响应正文
    在这里插入图片描述

  • 重要的响应头

    • Content-Type:text/html;charset=UTF-8:告诉客户端,资源文件的类型,还有字符编码
      -
      在这里插入图片描述
      在这里插入图片描述
  • 响应状态码
    -

  • cookie和session
    -


6. hash实现加密文件和加密字符串


  • 加密文件
    在这里插入图片描述

  • 加密字符串

在这里插入图片描述


7. 递归实现斐波那契和列表最大最小数


  • 递归斐波那契
def dg(n):

	if n==1 or n==2:
		return 1
	return dg(n-1)+dg(n-2)
n = int(input("请输入一个数n:"))
print(dg(n))

  • 用递归的方法,获取一个列表的最大值和最小值
a=[1,43,6,4,7,9,0,59]
max,min = a[0],a[0]
def dg(n,max,min):    
	if len(a)== 1:        
		return max,min    
	else:        
		num = a.pop()        
		if num >= max:            
			max = num        
		else:            
			max = max        
		if num <= min:            
			min = num        
		else:            
			min = min        
		return dg(len(a),max,min)
print(dg(len(a),max,min))
发布了107 篇原创文章 · 获赞 43 · 访问量 7075
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章