一、Urllib
1.什么是互联网爬虫?
如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据。
即通过一个程序来模拟浏览器,去向服务器发送请求,根据Url进行爬取网页,获取所需要的有用信息
2.爬虫核心
爬取网页:爬取整个网页 包含了网页中所有得内容
解析数据:将网页中你得到的数据 进行解析
难点:爬虫和反爬虫之间的博弈
3.爬虫的用途
数据分析/人工数据集
社交软件冷启动
舆情监控
竞争对手监控
4.爬虫分类
- 通用爬虫:
- 功能:访问网页‐>抓取数据‐>数据存储‐>数据处理‐>提供检索服务
- robots协议:
- 一个约定俗成的协议,添加robots.txt文件,来说明本网站哪些内容不可以被抓取,起不到限制作用,自己写的爬虫无需遵守
- 缺点:
- 抓取的数据大多是无用的
- 不能根据用户的需求来精准获取数据
- 聚焦爬虫:
- 功能:根据需求,实现爬虫程序,抓取需要的数据
- 设计思路:
- 确定要爬取的url
- 模拟浏览器通过http协议访问url,获取服务器返回的html代码
- 解析html字符串(根据一定规则提取需要的数据)
5.反爬手段
User‐Agent:
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版
本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
代理IP
- 西次代理
- 快代理
- 什么是高匿名、匿名和透明代理?它们有什么区别?
- 使用透明代理,对方服务器可以知道你使用了代理,并且也知道你的真实IP。
- 使用匿名代理,对方服务器可以知道你使用了代理,但不知道你的真实IP。
- 使用高匿名代理,对方服务器不知道你使用了代理,更不知道你的真实IP。
验证码访问
- 打码平台
- 云打码平台
- 超级🦅
动态加载网页 网站返回的是js数据 并不是网页的真实数据
- selenium驱动真实的浏览器发送请求
数据加密
- 分析js代码
6.urllib库使用
6.1 urllib的基本使用
1 | # 使用urllib来获取百度首页的源码 |
6.2 一个类型和六个方法
1 | #一个类型 HTTPResponse |
6.3 下载 网页、图片、视频
1 | import urllib.request |
7.请求对象的定制
7.1 url的组成
http/https www.baidu.com 80/443 s wd = Lisa #
协议 主机 端口号 路径 参数 锚点
常见的端口:
- http 80
- https 443
- mysql 3306
- redis 6379
- Tomcat 8080
7.2 UA介绍:
UA介绍:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本。浏览器内核、浏览器渲染引擎、浏览器语言、浏览器插件等。
1 | import urllib.request |
8.编解码
8.1 编解码的演变
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,
这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,
所以,中国制定了GB2312编码,用来把中文编进去。
你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc‐kr里,
各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。
现代操作系统和大多数编程语言都直接支持Unicode。
8.2 get请求方式1:urllib.parse.quote()
1 | import urllib.request |
8.2 get请求方式2:urllib.parse.urlencode()
1 | #-*-coding:utf-8-*- |
9.ajax的get请求
案例:豆瓣电影
1 | # -*-coding:utf-8-*- |
10.ajax的post请求
KFC地点查询
1 | # -*-coding:utf-8-*- |
11.UrlError\HTTPError
简介:
HTTPError类是URLError类的子类
导入的包urllib.error.HTTPError urllib.error.URLError
http错误:http错误是针对浏览器无法连接到服务器而增加出来的错误提示。引导并告诉浏览者该页是哪里出了问题。
通过urllib发送请求的时候,有可能会发送失败,这个时候如果想让你的代码更加的健壮,可以通过try‐
except进行捕获异常,异常有两类,URLError\HTTPError
1 | import urllib.request |