urllib

这个模块为在互联网上取数据提供了一个高水平的接口。尤其是 ==urlopen()== 方法与内建的 ==open()== 很相似,但是其参数是urls(Universal Resource Locators)而不是文件名。但是它有一定的限制,即只能打开urls进行阅读,而没有查找操作可供选择使用。

1
urllib.urlopen(url[,data[,proxies[,context]]])

打开一个被url标记的网络对象来阅读

1
2
3
4
5
6
7
8
9
# 传入一个url,返回该url页面的所有源代码
import urllib
def getHtml(url):
response = urllib.urlopen(url)
html = response.read()
return html

url = "http://www.baidu.com"
print getHtml(url)

urllib2

与urllib不同的是,如果我们要获取页面的源代码,先要使用 ==urllib2.Request(url)== 构造一个request,然后再使用urllib2.urlopen(request)来获得response,然后再用read()方法来读

urllib.Request(url,data,headers)有三个参数,第一个参数是必选,后面两个可选

url是请求的目标url

data是连同请求一起发送的信息,一般使用json格式(键值对,用”{}”括起来)

headers是请求头,可以在这里设置请求时带的user-agent,我们一般用它设置代理{‘User-Agent’:浏览器的user-agent}当然还可以添加其它的,比如Content-Type等

1
2
3
4
5
6
7
8
def getHtml2(url):
req = urllib2.Request(url)
response = urllib2.urlopen(req)
html = response.read()
return html

url = "http://www.baidu.com"
print getHtml2(url)

下面是一个使用了两个可选参数来登录一个wiki平台的例子,值得注意的是,data需要urlencode,我们可以使用urllib的 ==urllib.urlencode== 方法来对它进行urlendcode编码

先在登录页面随便输入用户名和密码

按f12后,我们可以在form data中看到对应用户名和密码的参数值,然后我们就可以通过该url和参数名来构造python脚本

1
2
3
4
5
6
7
8
9
10
11
import urllib
import urllib2
def login(url,data,header):
data = urllib.urlencode(data)
req = urllib2.Request(url,data,header)
rep = urllib2.urlopen(req)
return rep.read()
url = "http://120.79.33.253/doku.php?"
data = {"u":"xxxxx","p":"xxxxx"}
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
print login(url,data,header)

返回截图如下

从截图中,我们可以看出已经登录成功


以百度搜索来学习get方法

在上面都是应用的post的方法来提交数据,但是有些时候参数是在url中的,这时,我们就需要用get的方式来提交我们的数据了

从图中我们可以看出,我们搜索的关键字,被作为url中一个参数wd的值,这种请求方式我们称为get请求

而且删除其它参数,然后改变wd的值,提交,仍然可以得到搜索结果

但是如果是在没有第一次搜索后直接访问 ==https://www.baidu.com/s?wd=小说== 是不会得到搜索结果的

因为不能通过访问 ==https://www.baidu.com/s?wd=小说== 来得到搜索结果 所以我们不能直接用urllib和urllib2来下载页面

但是经过多次实现,我发现,如果我们是直接访问http://www.baidu.com/s?wd=keyword就可以到达结果页面,但是在浏览器中会自动跳转为https

于是我们的python代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
# coding:utf-8
import urllib
import urllib2
def getHtml(url,data,header):
data = urllib.urlencode(data)
print data
url = url+'?'+data+"'&rsv_bp=0&rsv_spt=3&rsv_n=2&inputT=6391'"
rep = urllib2.urlopen(url)
return rep.read()
url = "http://www.baidu.com/s" #注意一定要用http
data = {"wd":"小说"}
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
print getHtml(url,data,header)

返回截图如下:

最后更新: 2018年01月23日 10:07

原始链接: http://drac0nids.top/2018/01/22/urllib和urllib2/

× 请我吃糖~
打赏二维码