初始网络爬虫之三:网络爬虫最常用的requests库

本文详细介绍Python中的Requests库如何实现HTTP请求。包括GET和POST请求、处理复杂URL、响应编码及内容解析、请求头和响应头处理、Cookies管理、重定向与历史记录、超时设置、以及代理设置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#coding:utf8
#python中用第三方库requests实现HTTP请求,是python中最常见的。

#一:请求与响应模型
#GET请求
import requests
r = requests.get('https://www.baidu.com/')
print r.content

#POST请求
import requests
postdata = {'username' : '黑暗骑仕win',
            'password' : ''}
r = requests.post('https://www.baidu.com/',data=postdata)
print r.content

#请求复杂网址,如:http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1
import requests
payload = {'Keywords': 'blog:qiyeboy','pageindex':1}
r = requests.get('http://zzk.cnblogs.com/s/blogpost', params=payload)
print r.url
#打印出:http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1


#二:响应与编码
import requests
r = requests.get('https://www.baidu.com/')
print 'content-->'+r.content
print 'text-->'+r.text
print 'encoding-->'+r.encoding
r.encoding='utf-8'
print 'new text-->'+r.text

#chardet是一个非常优秀的字符串/文件编码检测模块pip install chardet
import requests
import chardet
r = requests.get('https://www.baidu.com/')
print chardet.detect(r.content) #chardet.detect()返回字典
#直接将chardet探测到的编码,赋值给r.encoding实现解码,r.text输出就不会乱码
r.encoding = chardet.detect(r.content)['encoding']
print r.text

#流模式获取响应
import requests
r = requests.get('https://www.baidu.com/',stream=True) #设置stream=Ture标志位,使响应以字节流方式进行读取
print r.raw.read(10) #r.raw.read函数指定读取的字节数



#三:请求头headers处理
#与urllib2相似,在get函数中添加headers参数即可
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
r = requests.get('https://www.baidu.com/',headers=headers)
print r.content



#四:响应码code和响应头headers处理
#status_code获取响应码      headers获取相应头
import requests
r = requests.get('https://www.baidu.com/')
if r.status_code == requests.codes.ok:
    print r.status_code #响应码
    print r.headers #响应头
    print r.headers.get('content-type') #推荐使用这种方式获取其中的某个字段
    print r.headers['content-type'] #不推荐使用这种获取方式
else:
    r.raise_for_status()


#五:Cookie处理
#在响应中包含Cookie值时,获取Cookie字段值
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent':user_agent}
r = requests.get('https://www.baidu.com/',headers=headers)
#遍历出所有的cookie字段的值
for cookie in r.cookies.keys():
    print cookie+':'+r.cookies.get(cookie)

#自定义Cookie值发送出去
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent':user_agent}
cookies = dict(name='qiye',age='10')
r = requests.get('https://www.baidu.com/',headers=headers,cookies=cookies)
print r.text


#Requeste中的session,可以像浏览器那样,每次访问的时候,程序自动把Cookie值带上
import requests
loginUrl = 'http://tieba.baidu.com/'
s = requests.Session()
#首先访问登陆界面,作为游客,服务器会先分配一个cookie
r = s.get(loginUrl,allow_redirects=True)
datas={'name':'黑暗骑仕win','passwd':''}
#向登陆链接发送post请求,验证成功,游客权限转为会员权限
r = s.post(loginUrl, data=datas,allow_redirects=True)
print r.text

#六:重定向与历史消息
#allow_redirects字段设置重定向
#如:r=requests.get('http://www.baidu.com',allow_redirects=True)
#allow_redirects=True允许重定向;allow_redirects=False禁止重定向
#若允许重定向,则通过r.history字段可查看历史信息,即访问成功之前的所有请求跳转信息
import requests
r = requests.get('https://www.baidu.com')
print r.url
print r.status_code
print r.history


#七:超时设置:使用参数timeout
requests.get('https"//www.baidu.com', timeout=0.1)


#八:Proxy代理设置
#可以为任意请求方法通过设置proxies参数来配置单个请求
import requests
proxies = {
    "http":"http://127.0.0.1:3128",
    "https":"http://127.0.0.1:1080",
}
requests.get("http://example.org", proxies=proxies)

#也可以通过环境变量HTTP_PROXY和HTTPS_PROXY来配置代理,但爬虫不常用
#代理需要使用HTTP Basic Auth ,可以使用http://user:password@host/语法:
proxies = {
    "http":"http://user:pass@127.0.0.1:3128/",
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值