Python2.7中urllib2网页抓取示例及原理分析
SO值的网页捕获是从网络流中获取在URL地址中指定的网络资源。 Python中有许多库可用于捕获网页。本文介绍了Urllib2。

Urllib2是一个带有Python2.7的模块(无需下载,可以通过导入使用)
URLLIB2官方文件:
URLLIB2源代码:
在Python3中,Urllib2更改为Urllib.Request
urlopen
让我们来第一个代码:
# urllib2_urlopen.py
# 导入urllib2 库
import urllib2
# 向指定的url发送请求,并返回服务器响应的类文件对象
response = urllib2.urlopen("http://www.baidu.com")
# 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
html = response.read()
# 打印字符串
print html
执行执行的Python代码将打印结果
Power@PowerMac ~$: python urllib2_urlopen.py
实际上,如果我们在浏览器上打开BAIDU主页,并正确单击以选择“查看源代码”,您会发现它与我们刚刚打印的内容完全相同。换句话说,上面的四行帮助我们在百度主页上攀登所有代码。
基本URL请求相应的Python代码真的很简单。
要求
在我们的第一个示例中,urlopen()的参数是URL地址;
但是,如果您需要执行更复杂的操作,例如增加HTTP标头,则必须创建一个请求实例作为urlopen()的参数;需要访问的URL地址用作请求实例的参数。
我们编辑urllib2_request.py
# urllib2_request.py
import urllib2
# url 作为Request()方法的参数,构造并返回一个Request对象
request = urllib2.Request("http://www.baidu.com")
# Request对象作为urlopen()方法的参数,发送给服务器并接收响应
response = urllib2.urlopen(request)
html = response.read()
print html
运行结果完全相同:
除了创建新的请求实例外,除了URL参数外,您还可以设置其他两个参数:
数据(默认为空):提交的表单数据以及HTTP请求方法将从默认的“ get”方法更改为“发布”方法。标题(默认为空):参数是一种字典类型,其中包含需要发送的HTTP标头的键值对。
用户代理
但是,如果您直接使用Urllib2将请求发送到网站,则确实有点令人困惑。例如,每个家庭都有一扇门。显然,作为一个路人,这不是很有礼貌。而且某些站点不喜欢通过程序访问(非人工访问),并且可能拒绝您的访问请求。
但是,如果我们以法律身份询问其他人的网站,那么显然是欢迎的,因此我们应该为我们的代码添加身份,即所谓的用户代理人。
#urllib2_useragent.py
import urllib2
url = "http://www.itcast.cn"
# IE 9.0 的 User-Agent,包含在 user_agent里
user_agent = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"}
# url 连同 headers,一起构造Request请求,这个请求将附带 IE9.0 浏览器的User-Agent
request = urllib2.Request(url, headers = user_agent)
# 向服务器发送这个请求
response = urllib2.urlopen(request)
html = response.read()
print html