--------------------12th-feb-----------------
-------------------------------------单元1:requests库入门
1.4HTTP协议及Requests的主要方法
NO1:Requests库的7个主要方法-------------:
1:requests.request():构造一个请求,支撑一下各方法的基础方法
2:requests.get(): 获取HTML网页的主要方法,对应于HTTP的GET
3:requests.head(): 获取HTML网页头部信息的方法,对应于HTTP的HEAD
4:requests.post(): 向HTML网页提交POST请求的方法,对应于HTTP的POST
5:requests.put(): 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
6:requests.patch(): 向HTML网页提交局部修改请求,对应于HTTP的PATCH
7:requests.delete(): 向HTTP页面提交删除请求,对应于HTTP的DELETE
NO2:HTTP协议------------------------:
1:定义部分
--HTTP,Hypertext Transfer Protocol:超文本传输协议
HTTP是一个基于"请求与响应"模式的。无状态的应用层协议
2:HTTP的理解
--HTTP协议采用URL作为定位网络资源的标识
URL格式 http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
HTTP URL实例:
http://www.bit.cn
http:220.181.111.188/duty
3:重点HTTP协议
HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
--HTTP协议对资源的操作:
GET: 请求获取URL位置的资源
HEAD: 请求获取URL位置资源的响应 信息报告,即获取该资源的头部信息
POST: 请求URL位置的资源附加 新的数据
PUT: 请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH: 请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE:请求删除URL位置存储的资源
请求:
使用GET HEAD
修改使用:
使用PUT POST PATCH DELETE
PATCH与PUT的区别:
PATCH局部修改,PUT全部覆盖
-------------------------------------单元1:requests库入门
1.5Requests库的主要方法解析
NO1:requests.request(method,url,**kwargs)
---method:请求方式
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)
---**kwargs:控制访问方式
1:params:字典或字节序列,作为参数增加到url中
kv = {"key1":"value1","key2":"value2"}
r = requests.request("GET","http://python123.io/ws",params=kv)
print(url)
返回值:
http://python123.io/ws?key1=value1&key2=value2
2:data:字典,字节序列或文件对象,作为Request的内容
kv = {"key1":"value1","key2":"value2"}
r = requests.request("POST","http://python123.io/ws",date=kv)
body = "主体内容"
r = requests.request("POST","http://python123.io/ws",date = body)
3:json:JSON格式的数据,作为Request的内容
kv = {"key1":"value1"}
r = requests.request("POST","http://python123.io/ws",json=kv)
4:headers:字典,HTTP定制头
hd = {"user-agent":"chrom/10"}
r = requests.request("POST","http://python123.io/ws",headers=kv)
5:cookies:字典或者CookieJar,Request中的cookie
6:auth:元组,支持HTTP认证功能
7:files:字典类型,传输文件
向一个连接提交一个文件
fs = {"file":open("data.xls","rb")}
r = requests.request("POST","http://python123.io/ws",files=fs)
8:timeout:设定超时时间,秒为单位
r = requests.request("GET","http://baodu.com",timeout=10)
9:proxies:字典类型,设定代理服务器,可以增加登录认证
防止对爬虫的逆追踪
pxs = {"http":"http://user:pass@10.10.10.1:1234"
"https":"https://10.10.10.1:4321"}
r = requests.request("GET","http://www.baidu.com",proxies=pxs)
10:allow_redirects:True/False,默认为True,重定向开关
11:stream:True/False,默认为True,获取内容立即下载开关
12:verify:True/False,默认为True,认证SSL证书开关
13:cert:本地SSL证书路径
---------------
params -------------requests.get中没有这个参数
data
json
headers...................................
----------------
coookies..................................
auth
files
timeout...................................
----------------
proxies...................................
allow_redirects...........................
stream
verify
---------------
cert
-------------------------------------单元1:requests库入门
1.6单元小结
.............................
-------------------------------------单元2:网络爬虫盗亦有道
2.1网络爬虫引发的问题
NO1:爬取网页的尺寸
---
小规模,数据量小
爬取速递不敏感
Requests库
功能:
爬取网页,玩转网页
---
中规模,数据规模较大
爬取速度敏感
scrapy库
功能:
爬取网站,爬取系列网站
---
大规模,搜索引擎,爬取速度关键
定制开发
功能:
爬取全网
NO2:网络爬虫的限制
---1:来源审查:判断User-Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或者友好爬虫的访问
---2:发布公告:robots协议
告知
-------------------------------------单元2:网络爬虫盗亦有道
2.2robots协议
NO1:Robots协议
Robots Exclusion Standard :网络爬虫排除标准
作用:告知那些页面可以抓取,那些页面不可以抓取
-------------------------------------单元2:网络爬虫盗亦有道
2.3robots协议的遵守方式
NO1:网络爬虫:自动或人工识别robots.txt,再进行内容爬取
-------------------------------------单元2:网络爬虫盗亦有道
2.4单元小结
........................
-------------------------------------单元3:Requests库网络爬虫实战
3.1京东商品页面的爬取
NO1:r.text返回的是一个列表,因为:可以用r.text[:1000]
-------------------------------------单元3:Requests库网络爬虫实战
3.2亚马逊商品页面的爬取
NO1:这个例子通过服务器返回的API错误信息状态,告诉要设置headers关键字参数
import requests
r = requests.get()
---查看服务器返回的头部信息的方法
注意:
r.request.headers
-------------------------------------单元3:Requests库网络爬虫实战
3.3百度360关键词提交
NO1:百度的关键词接口:
http://www.baidu.com/s?wd=keyword
360的关键词接口
http://www.so.com/s?q=keyword
import requests
kv = {"wd":"python"}
r = requests.get("http://www.baidu.com/s",params=kv)
r.status_code
"查看向网络请求的url,可以使用respnse对象包含的request信息"
r.request.url
len(r.text)
-------------------------------------单元3:Requests库网络爬虫实战
3.4网络图片的爬取和存储
NO1:网络图片链接的格式:
http://www.example.com/picture.jpg
图片的保存位置
import requests
path = "D:/abc.jpg"
url = "url"
r = requests.get(url)
r.status_code
"保存图片到文件"
with open (path,"wb")as f:
f.write(r.content)
f.close()
---全代码
import requests
import os
url = "url"
root = "D://pic//" #根目录
path = root + url.split("/")[-1] #文件目录
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,"wb") as f:
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
-------------------------------------单元3:Requests库网络爬虫实战
3.5IP地址归属地的自动查询
ip138
---NO1:如何向程序提交IP地址
手动输入IP地址的网络url的形式,以ip138为例
http://m.ip138.com/ip.asp?ip=ipaddress
import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
r = requests.get(url+"202.204.80.112")
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-500:])
except:
print("爬取失败") #为什么没有用params
---:异常重要的总结:
我们在网站上看到的人机交互方式,比如说文本框的,图形的,需要点击按钮的
在正式向后台服务器提交的时候,其实都是以链接的形式来提交的,只要通过浏览器的
解析知道向后台提交的链接形式,那么就可用程序来代替这一形式。
所有在向网站提交内容的时候,尝试挖掘网站后台的API是什么
-------------------------------------明天尝试内容
1:图片爬取检验
2:ip地址检验
3:**kwargs
4:再看requets库的前几章内容
5:异常重要的总结:
像ip地址查询那样,再点击图片时,
6:亚马逊的没有用headers时,返回的内容,r.request.headers
-------------------------------------单元3:Requests库网络爬虫实战
3.6单元小结
NO1:京东商品页面的爬取 ok
亚马逊页面的爬取,用到来源审查
百度360关键字的提交,用到**kwargs的params
网络的图片的爬取和存储,事实上只要是网络上以二进制存储的内容,都ok
ip地址的自动查询,启示:观察向服务器提交的请求,人工的分析网站的接口
思考:怎么看待网络的内容
爬虫的视角:网络上的任何内容都是指向url的,通过构造url
来实现对网络资源的获取
http协议的学习
一个对网络资源定位的url
一个对资源操作的6种操作,get head ,post ,put ,patch, delete
-------------------------------------单元1:requests库入门
1.4HTTP协议及Requests的主要方法
NO1:Requests库的7个主要方法-------------:
1:requests.request():构造一个请求,支撑一下各方法的基础方法
2:requests.get(): 获取HTML网页的主要方法,对应于HTTP的GET
3:requests.head(): 获取HTML网页头部信息的方法,对应于HTTP的HEAD
4:requests.post(): 向HTML网页提交POST请求的方法,对应于HTTP的POST
5:requests.put(): 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
6:requests.patch(): 向HTML网页提交局部修改请求,对应于HTTP的PATCH
7:requests.delete(): 向HTTP页面提交删除请求,对应于HTTP的DELETE
NO2:HTTP协议------------------------:
1:定义部分
--HTTP,Hypertext Transfer Protocol:超文本传输协议
HTTP是一个基于"请求与响应"模式的。无状态的应用层协议
2:HTTP的理解
--HTTP协议采用URL作为定位网络资源的标识
URL格式 http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
HTTP URL实例:
http://www.bit.cn
http:220.181.111.188/duty
3:重点HTTP协议
HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
--HTTP协议对资源的操作:
GET: 请求获取URL位置的资源
HEAD: 请求获取URL位置资源的响应 信息报告,即获取该资源的头部信息
POST: 请求URL位置的资源附加 新的数据
PUT: 请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH: 请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE:请求删除URL位置存储的资源
请求:
使用GET HEAD
修改使用:
使用PUT POST PATCH DELETE
PATCH与PUT的区别:
PATCH局部修改,PUT全部覆盖
-------------------------------------单元1:requests库入门
1.5Requests库的主要方法解析
NO1:requests.request(method,url,**kwargs)
---method:请求方式
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)
---**kwargs:控制访问方式
1:params:字典或字节序列,作为参数增加到url中
kv = {"key1":"value1","key2":"value2"}
r = requests.request("GET","http://python123.io/ws",params=kv)
print(url)
返回值:
http://python123.io/ws?key1=value1&key2=value2
2:data:字典,字节序列或文件对象,作为Request的内容
kv = {"key1":"value1","key2":"value2"}
r = requests.request("POST","http://python123.io/ws",date=kv)
body = "主体内容"
r = requests.request("POST","http://python123.io/ws",date = body)
3:json:JSON格式的数据,作为Request的内容
kv = {"key1":"value1"}
r = requests.request("POST","http://python123.io/ws",json=kv)
4:headers:字典,HTTP定制头
hd = {"user-agent":"chrom/10"}
r = requests.request("POST","http://python123.io/ws",headers=kv)
5:cookies:字典或者CookieJar,Request中的cookie
6:auth:元组,支持HTTP认证功能
7:files:字典类型,传输文件
向一个连接提交一个文件
fs = {"file":open("data.xls","rb")}
r = requests.request("POST","http://python123.io/ws",files=fs)
8:timeout:设定超时时间,秒为单位
r = requests.request("GET","http://baodu.com",timeout=10)
9:proxies:字典类型,设定代理服务器,可以增加登录认证
防止对爬虫的逆追踪
pxs = {"http":"http://user:pass@10.10.10.1:1234"
"https":"https://10.10.10.1:4321"}
r = requests.request("GET","http://www.baidu.com",proxies=pxs)
10:allow_redirects:True/False,默认为True,重定向开关
11:stream:True/False,默认为True,获取内容立即下载开关
12:verify:True/False,默认为True,认证SSL证书开关
13:cert:本地SSL证书路径
---------------
params -------------requests.get中没有这个参数
data
json
headers...................................
----------------
coookies..................................
auth
files
timeout...................................
----------------
proxies...................................
allow_redirects...........................
stream
verify
---------------
cert
-------------------------------------单元1:requests库入门
1.6单元小结
.............................
-------------------------------------单元2:网络爬虫盗亦有道
2.1网络爬虫引发的问题
NO1:爬取网页的尺寸
---
小规模,数据量小
爬取速递不敏感
Requests库
功能:
爬取网页,玩转网页
---
中规模,数据规模较大
爬取速度敏感
scrapy库
功能:
爬取网站,爬取系列网站
---
大规模,搜索引擎,爬取速度关键
定制开发
功能:
爬取全网
NO2:网络爬虫的限制
---1:来源审查:判断User-Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或者友好爬虫的访问
---2:发布公告:robots协议
告知
-------------------------------------单元2:网络爬虫盗亦有道
2.2robots协议
NO1:Robots协议
Robots Exclusion Standard :网络爬虫排除标准
作用:告知那些页面可以抓取,那些页面不可以抓取
-------------------------------------单元2:网络爬虫盗亦有道
2.3robots协议的遵守方式
NO1:网络爬虫:自动或人工识别robots.txt,再进行内容爬取
-------------------------------------单元2:网络爬虫盗亦有道
2.4单元小结
........................
-------------------------------------单元3:Requests库网络爬虫实战
3.1京东商品页面的爬取
NO1:r.text返回的是一个列表,因为:可以用r.text[:1000]
-------------------------------------单元3:Requests库网络爬虫实战
3.2亚马逊商品页面的爬取
NO1:这个例子通过服务器返回的API错误信息状态,告诉要设置headers关键字参数
import requests
r = requests.get()
---查看服务器返回的头部信息的方法
注意:
r.request.headers
-------------------------------------单元3:Requests库网络爬虫实战
3.3百度360关键词提交
NO1:百度的关键词接口:
http://www.baidu.com/s?wd=keyword
360的关键词接口
http://www.so.com/s?q=keyword
import requests
kv = {"wd":"python"}
r = requests.get("http://www.baidu.com/s",params=kv)
r.status_code
"查看向网络请求的url,可以使用respnse对象包含的request信息"
r.request.url
len(r.text)
-------------------------------------单元3:Requests库网络爬虫实战
3.4网络图片的爬取和存储
NO1:网络图片链接的格式:
http://www.example.com/picture.jpg
图片的保存位置
import requests
path = "D:/abc.jpg"
url = "url"
r = requests.get(url)
r.status_code
"保存图片到文件"
with open (path,"wb")as f:
f.write(r.content)
f.close()
---全代码
import requests
import os
url = "url"
root = "D://pic//" #根目录
path = root + url.split("/")[-1] #文件目录
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,"wb") as f:
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
-------------------------------------单元3:Requests库网络爬虫实战
3.5IP地址归属地的自动查询
ip138
---NO1:如何向程序提交IP地址
手动输入IP地址的网络url的形式,以ip138为例
http://m.ip138.com/ip.asp?ip=ipaddress
import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
r = requests.get(url+"202.204.80.112")
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-500:])
except:
print("爬取失败") #为什么没有用params
---:异常重要的总结:
我们在网站上看到的人机交互方式,比如说文本框的,图形的,需要点击按钮的
在正式向后台服务器提交的时候,其实都是以链接的形式来提交的,只要通过浏览器的
解析知道向后台提交的链接形式,那么就可用程序来代替这一形式。
所有在向网站提交内容的时候,尝试挖掘网站后台的API是什么
-------------------------------------明天尝试内容
1:图片爬取检验
2:ip地址检验
3:**kwargs
4:再看requets库的前几章内容
5:异常重要的总结:
像ip地址查询那样,再点击图片时,
6:亚马逊的没有用headers时,返回的内容,r.request.headers
-------------------------------------单元3:Requests库网络爬虫实战
3.6单元小结
NO1:京东商品页面的爬取 ok
亚马逊页面的爬取,用到来源审查
百度360关键字的提交,用到**kwargs的params
网络的图片的爬取和存储,事实上只要是网络上以二进制存储的内容,都ok
ip地址的自动查询,启示:观察向服务器提交的请求,人工的分析网站的接口
思考:怎么看待网络的内容
爬虫的视角:网络上的任何内容都是指向url的,通过构造url
来实现对网络资源的获取
http协议的学习
一个对网络资源定位的url
一个对资源操作的6种操作,get head ,post ,put ,patch, delete