我相信,大家既然想学python,那必然对爬虫有一定的了解,
爬虫,是一门技术,大多数编程语言都能写爬虫。但是,为什么这么多人会选择学习python来写爬虫程序呢?python的魅力就来了,大家用Java,用c写一份爬虫,可能需要几百行代码,但是用python可能就几十行甚至十几行就解决了。为什么呢?因为python有很多库。那么我们的起点就是在巨人的肩膀上往上爬。那必然是轻松了很多。
今天给大家先介绍一个爬虫用到的一个模块 requests库
requests库的介绍requests是python中的第三方库,他是基于urllib,在比其他编程语言编写爬虫时,可以节约我们大量的工作,完全满足HTTP测试需求。
requests库的安装安装requests库不着重介绍
pip install requests
安装完requests库之后就能正常使用,导入了。
requests.get()方法requests.get()是获取HTML网页的主要方法,对应于HTTP的GET
在编写代码时,是近乎是最不可或缺的一方法。
下面为示例:
import requests r = requests.get('http://www.baidu.com') # 获取url网址 print(r.status_code) # 查看访问的状况200为正常404失败 print(r.text) # 打印获取到的源代码 r.encoding = "utf8" # 编码方式改为utf8 print(r.text)
我相信通过此代码,大家对requests.get()方法有一定的了解.
respose对象的属性 r.status_coder.status_code在上文的代码中,也对其有一定的了解.。r.status_code是HTTP请求的反回状态,200表示连接成功,404表示失败
r.textr.text是HTTP响应内容的字符串形式,既,url对应的页面内容
r.encodingr.encoding是从HTTP header中猜测的响应内容编码方式。//若不更改,在访问一些网页时会出现中文乱码。
r.apparent_encodingr.apparent_encoding是从内容中分析出的响应内容编码方式(备选编码方式)
r.contentr.content是HTTP响应内容的二进制形式。在网页中,存储图片、音频、视频等就是用二进制形式存储的。这个属性通常用于爬取这些资源。
requests库的异常requests.ConnectionError 为网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError 为HTTP错误异常
requests.URLRequired 为URL缺失异常
requests.TooManyRedirects 为超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 为连接远程服务器超时异常
requests.Timeout 为请求URL超时,产生超时异常
爬取网页的通用代码框架
import requests # 爬取原代码函数 def getHTMLText(url): try: r = requests.get(url,timeout = 30) # 访问url r.raise_for_status() # 查看访问状态,看看200为成功 404失败 r.encoding = r.apparent_encoding # 编码方式改为分析来到编码方式 return r.text except: return "产生异常" if __name__ == '__main__': url = "http://www.python123.io" text = getHTMLText(url) print(text)requests.request(method,url,**kwargs)
其中**kwargs:控制访问的参数,均为可选项
params: 字典或字节序列,作为参数添加到url中
data:字典、字节序列或者文件对象,作为Request内容
json :JSON格式的数据,作为Request的内容
kv = {'key1':'value1'} r = requests.request('POST','http://www.baidu.com',json = kv)
headers :字典,HTTP定制头
cookies : 字典或cookieJar,Request中的cookie
auth :元组,支持HTTP认证功能
files:字典类型、传输文件
timeout :设定超时时间,秒为单位
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)
allow_redirects : True/False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify : True/False ,默认为True,认证SSL证书开关
cert:本地SSL证书路径
全代码import requestsb 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() # 当访问状态不是200时会抛出异常 r.encoding = r.apparent_encoding print(r.text[1000:2000]) except: print("爬取失败")百度搜索全代码
import requests keyword = "python" try: kv = {'wd',keyword} r = requests.get("http://www.baidu.com/s",params=kv) print(r.request.url) r.raise_for_status() print(len(r.text)) except: print('爬取失败')图片爬取全代码
import requests import os # 1.获取url def getImage(url, root): 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) r.encoding = r.apparent_encoding print(r.encoding) print(r.status_code) print(r.headers) with open(path,'wb') as f: f.write(r.content) f.close() print("保存成功") except: print("产生错误了") if __name__ == '__main__': url1 = 'https://img-pre.ivsky.com/img/bizhi/pre/201911/20/love_live.jpg' root = 'D://pics//' getImage(url1,root)
爬取图片的源代码,也可以用来爬取音频,视频等
IP地址查询全代码import requests url = "http://m.ip138.com/ip.asp?ip=" try: r = requests.get(url+'192.168.30.100') r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[-500:]) except: print("爬取失败")
通过此文章,我相信,大家对python中的requests库有了一定的了解,后续会给大家进一步的完善其python爬虫知识。beautifulsoup等模块
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)