网络爬虫学习笔记
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
- Resuests库入门
- request 库
- 安装方法:
- HTTP协议与Requests库的7个主要方法
- HTTP协议
- Requests库的7个主要方法
- requests.request(method,url,**kwargs)
- r = reuqests.get(url)
- 【【淘密令】】对象的属性
- 理解【【淘密令】】的编码
- Requests库的head(url,**kwargs)方法
- 【【微信】】s库的Post(url,data=None,json=None,**kwargs)方法
- Requests库的put(url,data=None,**kwargs)方法
- 【【微信】】ch(url,data=None,**kwargs)
- request.delete(url,**kwargs)
- 理解Requests库的异常
- 小结:Request库入门
- 网络爬虫引发的问题
- 网络爬虫限制
- Robots协议
- Robots协议基本语法
- 对Robots协议的理解
- 小结
- 实例
- 一:京东商品信息爬取
- 二、亚马逊商品页面爬取
- 三、百度/360搜索关键词提交
- 四、网络图片的爬取和存储
- 五、IP地址归属地的自动查询
- 单元小结
- Beautiful Soup 库的安装
- 测试
- BeautifulSoup 库的基本元素
- BeautifulSoup库的理解
- BeautifulSoup库解析器
- BeatufulSoup类的基本元素
- 基于bs4库的HTML内容遍历方法
- 标签树的下行遍历
- 标签树的上行遍历
- 基于bs库的HTML格式输出
- 小结
- 信息标记的三种形式
- 信息的标记
- HTML和其他的信息标记
- 三种信息标记比较
- 基于bs4库的HTML内容查找方法
- 扩展方法
- 小结
- 实例
- 实例一、“中国大学排名定向爬虫”实例介绍
- 正则表达式库Re入门
- 正则表达式的概念
- 正则表达式的语法
- 正则表达式的常用的操作符
- 语法实例
- 经典的正则表达式
- Re库的基本使用
- 调用方式
- 表示类型:
- 主要功能函数
- re.search(pattern,string,flags)
- re.match(pattern,string,flags)
- re.findall(pattern,string,flags)
- re.split(pattern,string,maxsplit,flags)
- re.finditer(pattern,string,flags)
- re.sub(pattern,repl,string,count=0,flags=0)
- Re库的另一种等价用法
- regex = re.compile(pattern,flags = 0)
- 等价方法对应
- match对象
- match对象的常用方法
- Re库的贪婪匹配和最小匹配
- 贪婪匹配:
- 最小匹配:
- 实例
- 淘宝商品比价定向爬虫实例介绍
- 功能描述:
- 程序的结构设计
- Scrapy网络爬虫框架
- scrapy安装
- Scrapy爬虫框架结构
- Scrapy爬虫框架解析
- Engine 模块(不需要用户修改)
- Downloader根据请求下载网页(不需要用户修改)
- Scheduler 对所有爬虫爬取请求进行调度管理(不需要用户修改)
- Spider(需要用户编写代码)
- 【【微信】】
- Spider Middleware(用户可以编写配置代码)
- requests库和scrapy对比
- 相同点:
- 不同点
- 选用那个技术路线开发爬虫
- Scrapy常用命令
- Scrapy命令行
- Scrapy命令行格式
- 实例
- 演示HTML地址页面爬取
- yield关键字
- 生成器实例
- Scrapy爬虫的基本使用
- Scrapy爬虫的使用步骤
- 涉及三各类:
- Request类
- 【【淘密令】】类
- Item类
- Scrapy爬虫提取信息的方法
- CSS Selector基本使用
request库参考地址
地址2
- 管理员权限启动cmd
- 输入>> pip install requests
测试:
- 启动idle
- 输入命令
HTTP协议
HTTP,Hypertext Transfer Protocol,超文本传输协议。
HTTP是一个基于“请求与相应”模式的、无状态的应用层协议。
HTTP协议采用URL作为定位网络资源的标识。
HTTP协议的URL格式 http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
HTTP URL实例
http://www.bit.edu.cn
http://220.181.11.188/duty
HTTPURL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
HTTP协议对资源的操作
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
理解patch和put的区别
假设URL位置有一组数据UserInfo,包含UserID、UserName等20个字段。
需求:用户修改了UserName,其他不变。
采用patch,仅向URL提交UserName的局部更新请求。
采用PUT,必须将所有20个字段一并提交到url,未提交字段被删除
patch节省网络带宽
Requests库的7个主要方法
方法 | 说明 |
---|---|
reuqests.request() | 构造一个请求支撑以下各方法的基础方法 |
reuqests.get() | 获取html页面的主要方法,对应于http的get |
reuqests.head() | 获取http网页头信息的方法,对应于http的Head |
reuqests.post() | 向http页面提交post请求,对应http的head |
reuqests.put() | 向http页面提交put请求,对应http的post |
reuqests.patch | 向html页面提交局部修改请求,对应于http的patch |
reuqests.delete() | 向html页面提交删除请求,对应于http的delete |
HTTP协议与Requests库方法
HTTP协议方法 | Requests库方法 | 功能一致性 |
---|---|---|
GET | reuqests.get() | 一致 |
HEAD | reuqests.head() | 一致 |
POST | reuqests.post() | 一致 |
PUT | reuqests.put() | 一致 |
PATCH | reuqests.patch | 一致 |
DELETE | reuqests.delete() | 一致 |
requests.request(method,url,**kwargs)
- method:请求方式,对应get/put/post等7种
r = requests.request(‘GET’,url,**kwargs)
r = requests.request('HEAD,url,**kwargs)
r = requests.request(‘POST’,url,**kwargs)
r = requests.request(‘PUT’,url,**kwargs)
r = requests.request(‘PATCH’,url,**kwargs)
r = requests.request(‘DELETE’,url,**kwargs)
r = requests.request(‘OPTIONS’,url,**kwargs)
- url:获取页面的url连接
- **kwargs:控制访问参数,共13个,均为可选项
- params:字典或字节序列,作为参数增加到url中
- data:字典、字节序列或文件对象,作为Request的内容
- json:JSON格式的数据,作为Request的内容
- 【【微信】】:字典,HTTP定制头
-
cookies:字典或CookieJar,Request中的cookie
-
auth:元组,支持HTTP认证功能
-
files:字典类型,传输文件
- timeout:设定的超时时间,以秒为单位
- proxies:字典类型,设定访问代理服务器,可以增加登录认证
-
【【微信】】:True/False,默认为True,重定向开关
-
stream:True/False,默认为True,获取内容立即下载开关
-
verify:True/False,默认为True,认证SSL证书开关
-
cert:保存本地ssl证书路径
r = reuqests.get(url)
构造一个向服务器请求资源的Request对象(Request)
返回一个包含服务资源的【【淘密令】】对象(【【淘密令】】)
主要参数列表
【【微信】】(url,params = None,**kwargs)
- url:你获取页面的url连接
- params: url中的额外参数,字典或字节流格式,可选
- *kwargs:12个控制访问的参数(同requests.request()函数除params*外的字段)
**【【淘密令】】对象:**包含爬虫返回的全部内容
【【淘密令】】对象的属性
属性 | 说明 |
---|---|
r.status_code | http请求的返回状态,200表示连接成功,404表示失败 |
r.text | http响应内容的字符串形式,即url对应的页面内容 |
r.encoding | 从http header中猜测响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的相应内容编码方式(备选编码方法) |
r.content | Http相应内容的二进制形式 |
理解【【淘密令】】的编码
属性 | 说明 |
---|---|
r.encoding | 从http header中猜测响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的相应内容编码方式(备选编码方法) |
r.encoding:如果header中不存在charset,则认为编码为’ISO-8859-1’
r.apparent_encoding:根据网页内容分析出的编码方式
Requests库的head(url,**kwargs)方法
**kwargs与requests.request方法完全一样
【【微信】】s库的Post(url,data=None,json=None,**kwargs)方法
- url:拟更新页面的url
- data:字典、字节序列或文件,Request的内容
- JSON格式的数据,Request的内容
- **kwargs:11个访问控制参数(同requests.request()的控制访问参数去除data和json)
向URL POST一个字典,自动编码为form(表单)
向URL POST一个字符串,自动编码为data
Requests库的put(url,data=None,**kwargs)方法
- url:拟更新页面的url连接
- data:字典、字节序列或文件,Request的内容
- **kwargs:12个控制访问的参数
【【微信】】ch(url,data=None,**kwargs)
- url:拟更新页面的url连接
- 字典、字节序列或文件,Request的内容
- **kwargs:12个控制访问参数
request.delete(url,**kwargs)
- url拟删除页面的url连接
- **kwargs:13个控制访问的参数
Request对象
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 远程连接服务器超时 |
requests.Timeout | 请求URL超时,产生超时异常 |
【【淘密令】】对象
异常 | 说明 |
---|---|
r.raise_for_status() | 如果不是200,产生异常requests.HTTPError |