urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

一:基础介绍

超时设置:由于网页的速度或者是对方服务器的问题,我们爬取网页的时候都需要一定的时间。如果访问一个网页但是长时间都没有响应,那么系统就会判断网页超时了,无法打开此网页。

有些时候我们需要自己来设定超时的时间,有的网站反应快,我们就会希望2秒没有反应就是超时,此时的timeout的值就是2.而有的网站服务器反应慢,我们就希望超时时间长一点。

自动模拟http请求:客户端与服务器端进行通信,需要通过http请求进行,http请求有很多种,在此只讲get与post 2种。在登录或者搜索信息的时候会用到。

二:实战讲解

1:设置超时实战

   设置timeout=0.1,则为超时。

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

下面用一个循环来显示一下效果:

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

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请求:

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

打开文件,点击,就是直接跳出搜索python的网页。

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

这里要注意的就是,key关键词如果是中文的话,是要进行相应编码的处理的。比如:

keyword="爬虫"

request.quote(keyword)

3..自动模拟http请求实战,post方法。

  需要 对字段进行相应的处理,所以要导入parse.

  需要真实的请求的提交地址。(在未来中需要用到抓包来分析,现在的例子就是用简单的)

    (1)设置url,要请求的网址

    (2)设置好对应的数据post ,运用urllib下的parse与urlencode

    (3)设置请求

     (4)写入

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

显示的结果为:

urllib实战3--超时设置(015)与自动模拟http请求get与post(016)

三:综上代码为:

>>> 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()