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 |