码迷,mamicode.com
首页 > 其他好文 > 详细

爬虫之requests介绍

时间:2017-11-07 20:57:17      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:path   www.   法则   alt   nec   cert   上传文件   请求方式   ext   

一 介绍

1 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是urllib3)
2 注意:requests库发送请求将网页代码下载下来之后,并不会执行js代码,这需要我们分析目标站点,然后发起新的requests请求
3 各种请求方式:常用的是requests.get()和requests.post()
    requests.get(url)
    requests.post(url,data={‘key‘:value})
    requests.put(url,data={‘key‘:‘value‘})
    request.delete(url)
    request.option(url)

二 基于GET请求

1. 基本请求

import requests
response = requests.get(‘http://www.baidu.com‘)
print(response.text)

高级用法:

1. SSL Cert Verification

# 证书验证(大部分网站都是https)
import requests
response = requests.get(‘https://www.12306.com‘) # 如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终止

#改进1:去掉报错,但是会警告
import requests
response = requests.get(‘https://www.12306.com‘,vertify=False) # 不验证证书,有警告,返回200

#改进2:去掉报错,并且去掉警告信息
import requests
from requests.packages import urllib3
urllib3.disable_warning() # 关闭警告
response = requests.get(‘https://www.12306.com‘)

#改进3:加上证书
#很多网站都是https,但是不用证书也可以访问,大多数情况下都是可以携带也可以不携带证书
#知乎,百度都是可带可不带
#有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定的网站

import requests
response=requests.get(‘https://www.12306.cn‘,
              cert=(‘/path/server.crt‘,‘/path/key‘))
)

2. 使用代理


#官网链接: http://docs.python-requests.org/en/master/user/advanced/#proxies


#代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情)
import requests
proxies={
‘http‘:‘http://egon:123@localhost:9743‘,#带用户名密码的代理,@符号前是用户名与密码
‘http‘:‘http://localhost:9743‘,
‘https‘:‘https://localhost:9743‘,
}
respone=requests.get(‘https://www.12306.cn‘,
proxies=proxies)


print(respone.status_code)


 


#支持socks代理,安装:pip install requests[socks]
import requests
proxies = {
‘http‘: ‘socks5://user:pass@host:port‘,
‘https‘: ‘socks5://user:pass@host:port‘
}
respone=requests.get(‘https://www.12306.cn‘,
proxies=proxies)


print(respone.status_code)

 

3. 超时设置

#超时设置
#两种超时:float or tuple
#timeout=0.3 #代表从发出到接收到的总时间
#timeout=(0.1,0.2) #0.1表示链接超时 0.2表示接收数据的超时时间

import requests
response=requests.get(‘https://www.baidu.com‘,timeout=0.001)

4. 认证设置

 

#官网链接:http://docs.python-requests.org/en/master/user/authentication/

#认证设置:登陆网站是,弹出一个框,要求你输入用户名密码(与alter很类似),此时是无法获取html的
# 但本质原理是拼接成请求头发送
# r.headers[‘Authorization‘] = _basic_auth_str(self.username, self.password)
# 一般的网站都不用默认的加密方式,都是自己写
# 那么我们就需要按照网站的加密方式,自己写一个类似于_basic_auth_str的方法
# 得到加密字符串后添加到请求头
# r.headers[‘Authorization‘] =func(‘.....‘)

#看一看默认的加密方式吧,通常网站都不会用默认的加密设置
import requests
from requests.auth import HTTPBasicAuth
r=requests.get(‘xxx‘,auth=HTTPBasicAuth(‘user‘,‘password‘))
print(r.status_code)

#HTTPBasicAuth可以简写为如下格式
import requests
r=requests.get(‘xxx‘,auth=(‘user‘,‘password‘))
print(r.status_code)

5. 异常处理

# 异常处理
import requests
from requests.exceptions import *

try:
  x=requests.get(‘https://www.baidu.com‘,timeout=0.0001)
except ReadTiomout:
  print(‘访问超时‘)
except ConnectionError:#网络不通
  print(‘网络不通‘)
except RequestException:
  .....

6. 上传文件

import requests
files = {‘file‘:open(‘a.jpg‘,‘rb‘)}
response=requests.post(url,files=files)

 

爬虫之requests介绍

标签:path   www.   法则   alt   nec   cert   上传文件   请求方式   ext   

原文地址:http://www.cnblogs.com/guomeina/p/7795630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!