点击上方蓝字关注"程序员Bob"呀~
"if something is important enough, even if the odds are against you, you should still do it." 如果一件事情对你很重要,即使成功的概率很小,你也应该去做。
——马斯克
Emmm,小编准备开始写第一篇关于Python爬虫的文章了,至于为什么第一篇是Requests库作为第一篇,主要是Python爬虫基本上都是用的Requests库搭配其它的库来进行爬取或者使用主流爬虫框架如Scrapy等进行爬取,使用Python框架爬取会在后面学到。其次是Requests对新手也很友好,虽然之后可能会用到异步携程,但使用Requests+单线程或多线程依旧是新手学习最优先的选择。
其次需要注意的是爬虫并不难学,但对于前端的知识点如HTML以及对于网络的理解要略重于学习Python。简单来说就是要弄清楚爬虫的原理。
NO.1准备Python环境
首先得安装好关于Python的环境。
使用
PyCharm或者Anaconda的spyder
,小编也主要是使用的这两个IDE,任选其一安装即可。安装传送门:
接下来便是
下载Requests库
,打开cmd窗口输入pip install requests.或者使用小编之前说的:
关于Python第三方库安装的那些事
可以先编写一个小小的程序检查以上步骤是否已成功完成:
import requestsr=requests.get("http://www.baidu.com")print(r.status_code)#请求的状态码print(type(r))#r的类型print(r.headers)#返回get请求页面的头部
输出页面如下说明Python环境配置以及库的下载无问题(联网状态下):
To:(状态码)r.status_code:HTTP请求的返回状态,200表示成功,404或其它的表示失败。
2.关于Requests库的学习:
首先介绍Requests库的7个主要使用方法:
requests.request() :构造一个请求,支撑以下各方法的基础方法。
requests.get():获取HTML网页的主要方法,对应于HTTP的Get。
requests.head():获取HTML网页头信息的方法,对应于HTTP的Head。
requests.post():向HTML网页提交Post请求的方法,对应于Http的Post。
requests.put():向HTML网页提交Put请求的方法,对应于HTTP的put。
requests.patch():向HTML网页提交局部修改请求,对应于HTTP的Patch。
requests.delete():向HTML页面提交删除请求,对应于HTTP的delete。
一.Get方法
首先讲述一下关于Requests库的get方法,r=requests.get(url)表示构造一个向服务器请求资源的Request对象;返回一个包含服务器资源的Response对象。
使用形式:
requests.get(url,params=None,**kwargs)
1.url:拟获取页面的url链接。
2.params:url中的额外参数,字典或字节流格式,可选。
3.**kwargs:12个控制访问的参数。
To:
在r=requests.get(url) 中包括Requests库的2个重要对象:一个是指向requests的Response对象,Response 对象包含爬虫返回的内容;还有一个是指向get的Request对象。
说到Response,就不得不说到
Response对象的属性:
r.status_code:HTTP请求的返回状态,200表示连接成功,404表示失败。
r.text:HTTP响应内容的字符形式,即:url对应的页面内容。
r.encoding:从HTTPheader中猜测的响应内容编码方式。
r.apparent_encoding:从内容分析出的响应内容编码方式(备选)。
r.content:HTTP响应内容的二进制形式。
以及
Response对象的编码:
r.emconding:如果header中不存在charset,则认为编码为ISO-8859-1。
r.apparent_encoding :根据网页内容分析出的编码方式。
打个比方,我们在用Requests方法访问某个页面时,首先使用r.status_code看是否为200,如果是,则可以通过r.text或r.encoding等查看相关信息;若是404或其它,则是因为某些原因出错或异常。
在控制台尝试输入下面的语句:
r=requests.get("http://www.baidu.com")r.status_coder.textr.encodingr.apparent_encodingr.encoding = 'utf-8'#备选编码替换r.text
控制台输入如下:
To:在控制台中不用带print语句。
二.head方法
如:r=requests.head('http://bob0912.github.io')
使用r.headers可以获取头部信息。
在控制台尝试输入下面语句:
r=requests.get("http://www.baidu.com")r.status_coder.headers
输出如下:
三.Post方法
post方法:向URL POST一个字典自动编码为form(表单),如下列语句:
payload={'key1':'value1','key2':'value2'}r=requests.post('http://bob0912.github.io',data=payload)print(r.text)
四.Request方法
使用形式:
requests.request(method,url,**kwargs)
1.method:请求方式,对应get/put/post等7种。
2.url:拟获得页面的url的链接。
3.**kwargs:控制访问参数,共13个。
关于method的七种请求方式:
r=requests.request('GET',url,**kwargs)
r=requests.request('HEAD',url,**kwargs)
r=requests.request('POST',url,**kwargs)
r=requests.request('PUT',url,**kwargs)
r=requests.request('PATCH',url,**kwargs)
r=requests.request('delete',url,**kwargs)
r=requests.request('OPTIONS',url,**kwargs)
**kwargs:控制访问参数,均为可选项
params:字典或字节序列,作为参数增加到url中,如:
kv={'key1':'value1','key2':'value2'}r=requests.request('GET','http://python123.io/ws',params=kv)print(r.url)
控制访问的参数有:
data:
字典,字节序列或文件对象,作为Request的内容。
kv={'key1':'value1','key2':'value2'}r=requests.request('POST','http://python123.io/ws',data=kv)
json:
JSON格式的数据,作为Request的内容。
kv={'key1':'value1'}r=requests.request('POST','http://python123.io/ws',json=kv)
headers:
字典,HTTP定制头。
hd={'user-agent':'chrome/10'}r=requests.request('POST','http://bob0912.github.io',headers=hd)
cookies:
字典或CookieJar,Request中的cookie。
auth:
元组,支持HTTP认证功能。
以上两个均为高级功能。
files:
字典类型,传输文件。
fs={'file':open('data.xls','rb')}r=requests.request('POST','http://bob0912.github.io',files=fs)
timeout:
设定超时时间,以秒为单位。
r=requests.request('GET','http://bob0912.github.io',timeout=10)
proxies:
字典类型,设定访问代理服务器,可以增加登录认证。
pxs={'http':'http://user:[email protected]:1234''http':'https://10.10.10.1.4321'}r=requests.request('GET','http://www.baidu.com',proxies=pxs)
这样当我们
访问百度时所使用的IP便是服务器的IP地址,可以有效隐藏自己的IP地址。
高级功能(了解即可):
allow_redirects:True/False,默认为True,重定向开关。
stream:True/False,默认为True,获取内容立即下载开关。
verify:True/False,默认为Ture,认证SSL证书开关。
cert:本地SSL证书路径。
Python爬虫系列,未完待续...
为你,千千万万遍.
往期推荐:
一键三连,就差你了