urllib初步
urllib基础
urllib.request.urlretrieve(url, filename=):将网页整体爬下来保存到文件里urllib.request.urlcleanup():清除使用urlretrieve时产生的缓存。file.info():输出使用urlopen获取的网页的信息file.getcode():输出使用urlopen获取的网页的状态码,如果状态码为200则表示获取网页正常,403表示禁止访问file.geturl():输出使用urlopen获取网页的网址
超时设置
爬取网页的时候,如果该网页长时间未响应,那么我们判断网页超时,无法打开该网页。有时候我们需要根据自己需要来设置超时的时间值,在urlopen函数中增加timeout的参数。例如我们读取google主页:
1  | import urllib.request  | 
自动模拟HTTP请求
客户端如果要与服务器进行通信,需要通过http请求来进行,http请求有很多种,这里主要记录post与get两种请求方式。比如登陆,搜索某些信息的时候会用到。
get请求
我们在google搜索某些关键字的时候,可以观察他的url。例如我们可以搜索python得到了google的url为:http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=python&oq=python&rsv_pq=9d99064b0016bf5e&rsv_t=9fe5q9eBEtUDaJbaxxhdUQFH4bZL9%2FgLSsjWzOpEyrqzei%2FJ6ekK%2FFPFr1g&rqlang=cn&rsv_enter=0&rsv_sug3=3&rsv_dl=tb&rsv_sug4=1591在这里我们可以看到网页url中有?开头的字段,其对应的就是get请求的字段wd=python,其中wd为字段名,python为字段值。字段与字段之间用&隔开。我们只会利用到其中的一些字段,通过一些实验之后我们可以发现关键字段为ie以及wd这两个字段(如果没有包含所有关键字段的话,返回的网页不是403forbidden就是该网页不存在,总之不正常),将非关键字段去除之后,我们可能会得到剩下的url为:http://www.baidu.com/s?ie=utf-8&wd=python。如果要进行网页爬取的话,应用这种比较简单的格式就可以。
将网址作为一个请求来发送的话,可参见下面的代码
1  | import urllib.request  | 
注意如果在请求中包含中文的时候会出现编码问题,需要使用urllib.request.quote('中文字符')来先对关键词进行编码,然后再进行爬取。
post请求
测试用网页:https://www.iqianyue.com/mypost/
post请求一般会在网站登录的时候使用到,下面我们来看一个例子,我们进入新浪的登录页面:https://login.sina.com.cn/signup/signin.php,查看此网页的源代码:
1  | <form method="post" id="vForm" name="vForm">  | 
找到这个页面中method为post的表单(form),检查其中的登录名与密码段落,关注其中的name字段,这里我们可以看到登录名的name属性为username而密码的name属性为password。
下面我们使用测试网页来进行测试,
1  | import urllib.request  |