您的位置:首页 > 编程语言 > Python开发

用python怎样爬网页呢?其实就是根据URL来获取它的网页信息!

2017-08-18 10:18 330 查看
我们在浏览器中看到的画面优美的界面,其实是由浏览器,对网页内容做了解释后,才呈现出来的类似word的WYSIWYG
实质它是一段HTML代码,加JS、CSS等。如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。最重要的部分是存在于HTML中的。

用一个例子来爬网页

import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()

这个例子中,真正的程序就两行,把它保存成demo.py,进入该文件的目录,执行如下命令查看运行结果。
python demo.py
可以看到这个网页的源码已经被爬下来了。

网页爬取方法

那么我们来分析这几行Python代码:
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()

第2行
response = urllib2.urlopen("http://www.baidu.com")
首先我们调用的是urllib2库里面的urlopen方法,传入一个URL
这个网址是百度首页,协议是HTTP协议
当然你也可以把HTTP换做FTP,FILE,HTTPS 等等,只是代表了一种访问控制协议

三个参数
urlopen一般接受三个参数,它的参数如下:
urlopen(url, data, timeout)
第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
第一个参数URL是必须要传送的,本例里传送了百度的URL
第二三个参数可以不传,
data默认为空None
timeout默认为socket._GLOBAL_DEFAULT_TIMEOUT

执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。
print response.read()
response对象有一个read方法,可以返回获取到的网页内容。

第3行
print response.read()
如果不加read直接打印会是什么?
直接打印出了该对象的描述
<addinfourlat 139728495260376 whose fp= <socket._fileobjectobject at 0x7f1513fb3ad0>>
所以一定要加read方法

构造Requset
其实上面的urlopen参数,可以传入一个request请求
它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容。

比如上面的三行代码,我们可以这么改写
import urllib2
request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()

运行结果是完全一样的,只不过中间多了一个request对象
推荐大家这么写,因为在构建请求时还需要加入好多内容
通过构建一个request,服务器响应请求得到应答,这样显得逻辑上清晰明确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息