urllib2 是 Python2.7 自带的模块(没有需求下载,导入便可应用)。
urllib2库的根本应用
所谓网页抓取,就是把URL地点中指定的网络资本从网络流中读掏出来,保留到内陆。 正在Python中有不少库能够用来抓取网页,咱们先学习urllib2。
urllib2 是 Python2.7 自带的模块(没有需求下载,导入便可应用) urllib2 民间文档:https://docs.python.org/2/library/urllib2.html urllib2 源码:https://hg.python.org/cpython/file/2.7/Lib/urllib2.py
urllib2 正在 python3.x 中被改成urllib.request
urlopen
咱们先来段代码:
# urllib2_urlopen.py # 导入urllib2 库 import urllib2 # 向指定的url发送申请,并前往效劳器呼应的类文件工具 response = urllib2.urlopen("http://www.百度.com") # 类文件工具支持 文件工具的操作办法,如read()办法读取文件全副内容,前往字符串 html = response.read() # 打印字符串 print html
执行写的python代码,将打印后果
Power@PowerMac ~$: python urllib2_urlopen.py
实际上,假如咱们正在阅读器上关上baidu主页, 右键抉择“查看源代码”,你会发现,跟咱们方才打印进去的是如出一辙。也就是说,下面的4行代码就曾经帮咱们把baidu的首页的全副代码爬了上去。
一个根本的url申请对应的python代码真的十分简略。
Request
正在咱们第一个例子里,urlopen()的参数就是一个url地点;
然而假如需求执行更复杂的操作,比方添加HTTP报头,必需创立一个 Request 实例来作为urlopen()的参数;而需求拜访的url地点则作为 Request 实例的参数。
咱们编纂urllib2_request.py
# urllib2_request.py import urllib2 # url 作为Request()办法的参数,结构并前往一个Request工具 request = urllib2.Request("http://www.百度.com") # Request工具作为urlopen()办法的参数,发送给效劳器并接纳呼应 response = urllib2.urlopen(request) html = response.read() print html
运转后果是齐全同样的:
新建Request实例,除了了必需要有 url 参数以外,还能够设置另外两个参数: data(默许空):是随同 url 提交的数据(比方要post的数据),同时 HTTP 申请将从 "GET"形式 改成 "POST"形式。 headers(默许空):是一个字典,蕴含了需求发送的HTTP报头的键值对。 这两个参数上面会说到。
User-Agent
然而这样间接用urllib2给一个网站发送申请的话,的确略有些冒昧了,就好比,人家每一家都有门,你以一个路人的身份间接闯出来显然没有是很礼貌。并且有一些站点没有喜爱被顺序(非工钱拜访)拜访,有可能会回绝你的拜访申请。
然而假如咱们用一个非法的身份去申请他人网站,显然人家就是欢送的,以是咱们就应该给咱们的这个代码加之一个身份,就是所谓的User-Agent头。
阅读器 就是互联网世界上公认被容许的身份,假如咱们心愿咱们的爬虫顺序更像一个实在用户,那咱们第一步,就是需求假装成一个被公认的阅读器。用没有同的阅读器正在发送申请的时分,会有没有同的User-Agent头。 urllib2默许的User-Agent头为:Python-urllib/x.y(x以及y是Python主版本以及次版本号,例如 Python-urllib/2.7)
#urllib2_useragent.py import urllib2 url = "http://www.itcast.cn" #IE 9.0 的 User-Agent,蕴含正在 ua_header里 ua_header = {"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 = ua_header) # 向效劳器发送这个申请 response = urllib2.urlopen(request) html = response.read() print html
增加更多的Header信息
正在 HTTP Request 中退出特定的 Header,来结构一个完好的HTTP申请音讯。
能够经过挪用Request.add_header() 增加/修正一个特定的header 也能够经过挪用Request.get_header()来查看已有的header。
增加一个特定的header
# urllib2_headers.py import urllib2 url = "http://www.itcast.cn" #IE 9.0 的 User-Agent header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"} request = urllib2.Request(url, headers = header) #也能够经过挪用Request.add_header() 增加/修正一个特定的header request.add_header("Connection", "keep-alive") # 也能够经过挪用Request.get_header()来查看header信息 # request.get_header(header_name="Connection") response = urllib2.urlopen(req) print response.code #能够查看呼应状态码 html = response.read() print html
随机增加/修正User-Agent
# urllib2_add_headers.py import urllib2 import random url = "http://www.itcast.cn" ua_list = [ "Mozilla/5.0 (Windows NT 6.1; ) Apple.... ", "Mozilla/5.0 (X11; CrOS i686 2268.111.0)... ", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X.... ", "Mozilla/5.0 (Macintosh; Intel Mac OS... " ] user_agent = random.choice(ua_list) request = urllib2.Request(url) #也能够经过挪用Request.add_header() 增加/修正一个特定的header request.add_header("User-Agent", user_agent) # 第一个字母年夜写,前面的全副小写 request.get_header("User-agent") response = urllib2.urlopen(req) html = response.read() print html
相干教程保举:Python视频教程
以上就是Python若何装置urllib2库的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题
抱歉,评论功能暂时关闭!