r = requests.get(url)
返回两个对象,响应对象和请求对象
响应包含爬虫返回的内容
r.status_code# HTTP请求返回状态,200表示连接成功,404表示失败
r.text #HTTP相应内容的字符串形式,即url对应的页面内容
r.encoding #从HTTP header 中猜测的响应内容编码方式
# 如果header中不存在charset,则认为编码默认ISO-8859-1
r.apparent_encoding #从内容中分析出响应内容编码方式(备选编码方式)
r.content # HTTP响应内容的二进制形式
请求异常
requests.ConnectionError#网络连接异常,如DNS查询失败,防火墙拒绝连接
requests.HTTPError #HTTP错误异常
requests.URLRequired # URL缺失异常
requests.TooManyRedireets #超过最大重定向次数,产生重定向异常
requests.ConnectTimeout# 连接远程服务器超时
requests.Timeout # 请求URL超时,产生超时异常
通用代码框架
#coding=utf-8
import requests
def getHTMLText(url):
try:
r = requests.get(url)
r.raise_for_ststus() # 如果状态码不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
if __name__ == '__main__':
url = "http://www.baidu.com"
print getHTMLText(url)
HTTP协议与请求库方法
HTTP超文本传输协议,
以URL作为定位网络资源标识,URL格式:
http:// host [:post] [path]
host为合法的Internet域名或IP地址
post端口号,缺省端口为80
路径请求资源路径
HTTP协议与请求库方法一致
get < - > requests.get请求获取URL的位置资源
head < - > requests.head#获得该资源的头部信息
post < - > requests.post向URL位置后添加新的数据
put < - > request.put#请求向URL位置存储一个资源,
覆盖原有资源
补丁< - > requests.patch改变该处资源的部分内容
删除< - >请求删除URL位置资源
requests.request(方法,URL,** kwargs)
方法有7种:
requests.request('GET',url,** kwargs)
'HEAD','POST','PUT','PATCH','删除','OPTION'
r.requests('GET',url)
print r.request.url
能够输出向服务器提交的url链接。
** kwargs为可选参数13个:
1.params作为参数增加到url中
kv={'key1':'value1','key2':'value2'}
r=requests.request('GET','http://python123.io/ws',params=kv)
print(r.url)
#http://python123.io/ws?key1=value1&key2=value2
2.data:字典,字节序列或文件对象,作为请求的内容
kv={'key1':'value1','key2':'value2'}
r=requests.request('POST','http://python123.io/ws',data=kv)
body='主体内容'
r=requests.request('POST','http://python123.io/ws',data=body)
3.json:JSON格式的数据,作为请求的内容
kv={'key1':'value1'}
r=requests.request('POST','http://python123.io/ws',json=kv)
4.headers:字典,HTTP定制头
hd={'user‐agent':'Chrome/10'}
r=requests.request('POST','http://python123.io/ws',headers=hd)
5.cookies:字典或CookieJar,请求中的cookie
6.auth:元组,支持HTTP认证功能
7.files:字典类型,传输文件
fs={'file':open('data.xls','rb')}
r=requests.request('POST','http://python123.io/ws',files=fs)
可以用来向URL传输文件
8.timeout:设定超时时间,秒为单位
r=requests.request('GET','http://www.baidu.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证书路径
requests.get(url,params = None,** kwargs)
∙params:url中的额外参数,字典或字节流格式,可选
** kwargs:12个控制访问的参数
requests.head(url,** kwargs)
∙** kwargs:12个控制访问的参数
常用
更改头部信息访问:
coding=utf-8
import requests
url = 'https://www.amazon.cn/gp/product/B01M8L5Z3Y'
#有些网站根据头部信息判断为爬虫拒绝访问,可以更改头部信息来访问
try:
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print r.text[:3000]
except:
print 'error'
百度360关键字访问
import requests
keyword = 'pyhton'
url = 'http://www.baidu.com'
try:
kv = {'wd':keyword}
r = requests.get(url,params = kv)
r.encoding = r.apparent_encoding
print r.request.url
r.raise_for_status()
print len(r.text)
except:
print "error"
入门例子:百度翻译中英互译
导入请求
导入json
导入sys
类BaiduFanyi:
def __init __(self,
query_string ):self.post_url =“http://fanyi.baidu.com/basetrans”
self.query_string =
query_string self.headers = {
“User-Agent”: “Mozilla / 5.0(iPhone; CPU iPhone OS 10_3,如Mac OS X)AppleWebKit / 602.1.50(KHTML,如Gecko)CriOS / 56.0.2924.75 Mobile / 14E5239e Safari / 602.1”}
def lang_detect(self):#进行语言检测
#1。准备数据
lang_detect_url =“http://fanyi.baidu.com/langdetect”
post_data = {“query”:self.query_string}
#2。发送请求
html_str = self.parse_url(post_data,url = lang_detect_url)
print(html_str)
#3。
提取数据lan = json.loads(html_str)[“lan”]
返回lan
def get_post_data(self):#准备发布数据
lan = self.lang_detect()
to =“zh”如果lan ==“en”else “恩”
如果len = “EN” #:
#至= “EN”
#别的:
#为= “EN”
数据= { “查询”:self.query_string,
“ 从”:LAN,
“ 要”:要}
回报data
def parse_url(self,post_data,url):#发送请求,获取数据
response = requests.post(url,post_data,headers = self.headers)
返回response.content。decode()
def get_ret(self,html_str):#提取结果
dict_ret = json.loads(html_str)
ret = dict_ret [“trans”] [0] [“dst”]
print(“{}的翻译结果是:{}”。format(self.query_string,ret))
def run(自):#实现主要逻辑
#1.url,post_data
post_data = self.get_post_data()
#2发送请求,获取数据
html_str = self.parse_url(post_data,URL = self.post_url)
#3提取数据,打印
自.get_ret(html_str)
if __name__ =='__ main__': query_string =
sys.argv [1]
baidu_fanyi = BaiduFanyi(query_string)
baidu_fanyi.run()
在终端找到你的文件并执行加上你要翻译的内容