一.requests的用法
requests库的7个主要方法:
get()方法:
import requests
r=requests.get('http://baidu.com')
print(r.status_code)
如果返回的状态码是200,说明访问成功
response对象的属性:
用get方法获取网上资源时的基本流程:
1.用r.status_code检查是否访问成功
2.如果返回值是200,则用r.text等其余四个属性解析返回的内容
3.如果返回值是404或者其他,说明访问异常
import requests
r=requests.get('http://www.baidu.com')
print(r.status_code)
print(r.text) #很多乱码
print(r.encoding)
print(r.apparent_encoding) #输出为utf-8
r.encoding='utf-8' #替换后就可以解析出中文
print(r.text)
二.爬取网页的通用代码框架
requests库的异常
import requests
def getHTMLtext(url):
try:
r=requests.get(url)
r.raise_for_status() #如果响应值不是200,产生异常
except:
return ('产生异常')
else:
return(r.text)
url='http://www.baidu.com'
print(getHTMLtext(url))
当响应值是200时输出url页面的内容,当响应值不是200时输出产生异常
以上代码中定义的函数可替换为
def getHTMLtext(url):
try:
r=requests.get(url)
r.raise_for_status()
return r.text
except:
return '产生异常'
三.http协议
http: hypertex transfer protocol,超文本传输协议,基于请求与响应的(用户发起请求,服务器做响应)、无状态的(第一次请求与第二次请求没有关联)应用层协议
url,统一资源定位符,是通过http协议存取资源的internet路径
http协议对资源的操作:
获取资源:get、head
存储资源:post、put、patch
删除资源:delete
http协议和requests库:
获取头部信息:
r=requests.head(url)
print(r.headers)
四.requests库的方法解析
1.request方法:
五.网络爬虫
六.Robots协议
Robots Exclusion Standard 网络爬虫排除标准
位置:url/robots.txt 例:https://www.baidu.com/robots.txt
作用:网站告知爬虫哪些页面可以抓取,哪些不能抓取
形式:在网站根目录下的robots.txt文件
user-agent:* (用户)
disallow:/ (不允许)
*代表所有 /代表根目录
例:
Disallow:/ ?*不允许访问任何?开头的
Disallow:/ pop/*.html不允许访问pop下任何.html
七.爬虫实例:
1.爬取某个页面
import requests
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
url='https://www.bilibili.com/video/av9784617/?p=15'
try:
r=requests.get(url,headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text)
except:
print('爬取失败')
查看headers:
print(r.request.headers)
2.提交关键词搜索,以blibli为例
blibli搜索url如下,我们需要用params自己构造一个url
import requests
kv={
'keyword':'python'
}
url='https://search.bilibili.com/all'
try:
r = requests.get(url, params=kv) #把kv的参数添加到url后面
r.raise_for_status()
r.encoding=r.apparent_encoding
print(len(r.text))
except:
print('爬取失败')
3.网络图片的爬取和存储
import requests
import os
url='http://a.hiphotos.baidu.com/image/pic/item/960a304e251f95caf1852c0bc4177f3e6709521e.jpg'
root='D:/aaa/'
path=root+url.split('/')[-1]+'.jpg'
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('文件爬取失败')
4.ip地址查询(通过ip138网站查询)
import requests
url='http://www.ip138.com/ips138.asp?ip='
try:
r = requests.get(url + '202.12.35.63')
r.encoding=r.apparent_encoding
r.raise_for_status()
print(r.text)
except:
print('爬取失败')