urllib实战3--超时设置(015)与自动模拟http请求get与post(016)
一:基础介绍
超时设置:由于网页的速度或者是对方服务器的问题,我们爬取网页的时候都需要一定的时间。如果访问一个网页但是长时间都没有响应,那么系统就会判断网页超时了,无法打开此网页。
有些时候我们需要自己来设定超时的时间,有的网站反应快,我们就会希望2秒没有反应就是超时,此时的timeout的值就是2.而有的网站服务器反应慢,我们就希望超时时间长一点。
自动模拟http请求:客户端与服务器端进行通信,需要通过http请求进行,http请求有很多种,在此只讲get与post 2种。在登录或者搜索信息的时候会用到。
二:实战讲解
1:设置超时实战
设置timeout=0.1,则为超时。
下面用一个循环来显示一下效果:
2.自动模拟http请求实战,get方法。
首先我们 在百度上搜索“python”,复制这个网址:
https://www.baidu.com/s?wd=python&rsv_spt=1&rsv_iqid=0x89a7ee4000066b41&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1
然后我们去掉无用的东西 : https://www.baidu.com/s?wd=python
实验得知,是一样的效果,都是搜索python。那么我们就可以用这种方式,在python中用代码进行http请求:
打开文件,点击,就是直接跳出搜索python的网页。
这里要注意的就是,key关键词如果是中文的话,是要进行相应编码的处理的。比如:
keyword="爬虫"
request.quote(keyword)
3..自动模拟http请求实战,post方法。
需要 对字段进行相应的处理,所以要导入parse.
需要真实的请求的提交地址。(在未来中需要用到抓包来分析,现在的例子就是用简单的)
(1)设置url,要请求的网址
(2)设置好对应的数据post ,运用urllib下的parse与urlencode
(3)设置请求
(4)写入
显示的结果为:
三:综上代码为:
>>> from urllib import request
>>> for i in range(0,100):
try:
file=request.urlopen("http://yum.iqianyue.com",timeout=1)
data=file.read()print(len(data))
except Exception as e:
print("出现异常:"+str(e))
---------get请求
>>> keyword="python"
>>> url="http://www.baidu.com/s?wd="+keyword
>>> req=request.Request(url)
>>> data=request.urlopen(req).read()
>>> file=open("G:/BaiduDownload/python网络爬虫/WODE/015y.html","wb")
>>> file.write(data)
>>> file.close()
---------------post请求
>>> import urllib.request>>> import urllib.parse
>>> url="http://www.iqianyue.com/mypost/"
>>> #字段的设置
>>> mydata=urllib.parse.urlencode({ "name":"[email protected]","pass":"123456"}).encode("utf-8")
>>> req=request.Request(url,mydata)
>>> data=request.urlopen(req).read()
>>> fh=open("G:/BaiduDownload/python网络爬虫/WODE/017x.html","wb")
>>> fh.write(data)
>>> fh.close()