本文摘自php中文网,作者巴扎黑,侵删。
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。在Python中有很多库可以用来抓取网页,我们先学习urllib.request。(在python2.x中为urllib2)urlopen
我们先阅读以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | __author__ = 'mayi'
import urllib.request
response = urllib.request.urlopen( "http://www.baidu.com/" )
html = response.read()
print (html)
|
实际上,如果我们在浏览器上打开百度主页,右键选择“查看源代码”,你会发现,跟我们执行上面的程序输出的结果是一模一样的。也就是说,上面的几行代码就已经帮我们把百度的主页的全部代码爬了下来。
Reuqest
在上面的例子里,urlopen()的参数就是一个url地址。
但是如果需要执行更复杂的操作,比如增加HTTP报头,则必须创建一个Request实例来作为urlopen()的参数,而需要访问的url地址则作为Request实例的参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | __author__ = 'mayi'
import urllib.request
request = urllib.request.Request( "http://www.baidu.com/" )
response = urllib.request.urlopen(request)
html = response.read()
print (html)
|
运行结果是完全一样的:
新建的Request实例,除了必须要有url参数之外,还可以设置另外两个参数:
1.data(默认为空):是伴随url提交的数据(比如post的数据),同时HTTP请求将从“GET”方式改为“POST”方式。
2.headers(默认为空):是一个字典,包含了需要发送的HTTP报头的键值对。
User-Agent
如果我们希望我们的爬虫程序更像一个真实用户,那们我们第一步,就是需要伪装成一个被公认的浏览器。用不同的浏览器在发送请求的时候,会有不同的User-Agent头。urllib.request默认的User-Agent头为:Python-urllib/x.y(x和y是Python主版本和次版本号,例如Python-urllib/3.5)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | __author__ = 'mayi'
import urllib.request
header = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36' }
request = urllib.request.Request( "http://www.baidu.com/" , headers = header)
response = urllib.request.urlopen(request)
html = response.read()
print (html)
|
添加更多的Header信息
在HTTP Request中加入特定的Header,来构造一个完整的HTTP请求消息。
1 2 | 可以通过调用Request.add_header() 添加 / 修改一个特定的header
也可以通过调用Request.get_header()来查看已有的header。
|
添加一个特定的header
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | __author__ = 'mayi'
import urllib.request
header = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36' }
request = urllib.request.Request( "http://www.baidu.com/" , headers = header)
request.add_header( "Connection" , "keep-alive" )
response = urllib.request.urlopen(request)
html = response.read()
print (html)
|
以上就是urllib.request库的使用基础的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python字典的键可以相同吗
Python后端开发学习什么
用Python实现高性能测试工具(二)
什么是Python线程同步?一文读懂Python线程模块
Python是什么软件?
Python操作excel详解
如何用Python打开excel
Python注释用什么符号
Python中关于django使用的图文详解
Python excel使用xlutils类库实现追加写功能的方法
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » urllib.request库的使用基础