python爬取Tencent体育图库的图纸几页美高梅4858官方

作者:编程技术

importurllib.requestimporturllib.errorimportredefuse_id(url,add_proxy卡塔尔:"""使用代理服务器爬取网页"""headers=("User-Agent","Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:69.0卡塔尔国Gecko/二〇〇八0101Firefox/69.0"卡塔尔(قطر‎#照猫画虎浏览器访谈网页req=urllib.request.Request(url卡塔尔(英语:State of Qatar)#行使代理服务器proxy=urllib.request.ProxyHandler({"http":add_proxy})opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)opener.addheaders=[headers]urllib.request.install_opener(opener)response=urllib.request.urlopen(req).read().decode("utf-8","ignore")returnresponse#爬取Locke王国富有图片url=""add_proxy="127.0.0.1:8888"response=use_id(url,add_proxy)re_picture='(*?.gif)'url_picture=re.compile(re_picture).findall(response)print(url_picture)#写入文件foriinrange(0,len(url_picture)):try:headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:69.0)Gecko/20100101Firefox/69.0","Host":"newsimg.5054399.com"}req=urllib.request.Request(url_picture[i],None,headers)find_picture=urllib.request.urlopen(req).read().decode("GB2312","ignore")excepturllib.error.URLErrorase:#判断是还是不是有动静码ifhasattr(e,"code"卡塔尔:print(e.code卡塔尔(قطر‎#判别是不是有缘由ifhasattr(e,"reason"卡塔尔:print(e.reason卡塔尔国exceptExceptionaserror_understand:print("未知错误"卡塔尔(英语:State of Qatar)else:fp=open("F:/picture/%d.jpg"%i,"w",encoding="GB2312"卡塔尔(英语:State of Qatar)fp.write(find_picture卡塔尔fp.close(卡塔尔print("第%d个图片增多成功"%(i 1卡塔尔国卡塔尔print("爬取甘休"卡塔尔(قطر‎正则表明式能够获取到内容,正是下载出来图片以往打不开,呈现不能够展开此文件..怎么解,求大佬告知!!

importurllibimportreimporturllib2#打响爬取了Tencent快讯体育图片的几页foriinrange(2,4):#此地能够自身设置要爬取的页数,此处为了测量检验值爬取了两页url="_" str(i) ".htm"#考查每页的变化req=urllib2.Request(url卡塔尔国req.add_header=("User-Agent","Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:67.0)Gecko/20100101Firefox/67.0")#佯装浏览器response=urllib.urlopen(url卡塔尔(قطر‎html=response.read(卡塔尔(قطر‎.decode("gbk","ignore"卡塔尔(英语:State of Qatar)src=r'imgsrc="(//.*?.jpg)"'imgrl=re.compile(src)imglist=re.findall(imgrl,html)x=0foreachinimglist:print"" str(each)response=urllib.urlopen("" str(each))#超级重大的一些是独有是始于这种格式的手艺被urlopen编写翻译sport_img=response.read()withopen("D:zoopictures%s%s.jpg"%(i,x),"wb")asf:#名字命名重复的话会使得图片被遮住f.write(sport_img)x =1

 

美高梅4858官方网站 1

日常,U陆风X8LError在未曾互联网连接(未有路由到特定服务器卡塔尔国,恐怕服务器不设有的场地下发出
卓殊同样会蕴藏”reason”属性,它是叁个tuple,包括了多个错误号和一个错误音信

req = urllib2.Request('')
response = urllib2.urlopen(req)
the_page = response.read()

class HTTPHandler(AbstractHTTPHandler):
    def http_open(self, req):
        return self.do_open(httplib.HTTPConnection, req)
    http_request = AbstractHTTPHandler.do_request_

采纳例子:

Httplib模块中还定义了累累常量,如:
Httplib. HTTP_PORT 的值为80,表示默许的端口号为80;
Httplib.OK 的值为200,表示央求成功重回;
Httplib. NOT_FOUND 的值为404,表示乞求的能源不设有;
能够透过httplib.responses 查询相关变量的意思,如:
Print httplib.responses[httplib.NOT_FOUND] #not found
更加多关于httplib的新闻,请参见Python手册httplib 模块。
urllib 和urllib2完成的功效如出生龙活虎辙,但urllib2要比urllib效能等各个地方面更加高一个档次。目前的HTTP访谈抢先贰分之一都施用urllib2.

 

HTTPHandler是Openers个中的暗中认可调整器之黄金年代,看见那个代码,证实了urllib2是信任httplib实现的,同临时候也作证了Openers和Handlers的涉嫌。

 

行使代理ProxyHandler:

opener = build_opener(proxy_handler, proxy_auth_handler)
# This time, rather than install the OpenerDirector, we use it directly:
opener.open('')
URLError–HTTPError:
from urllib2 import Request, urlopen, URLError, HTTPError
req = Request(someurl)
try:
     response = urlopen(req)
except HTTPError, e:
     print 'Error code: ', e.code
except URLError, e:
     print 'Reason: ', e.reason
else:
      ............. 

FTP同样:

from urllib2 import Request, urlopen, URLError
req = Request(someurl)
try:
     response = urlopen(req)
except URLError, e:
     if hasattr(e, 'reason'):
           print 'Reason: ', e.reason
     elif hasattr(e, 'code'):
           print 'Error code: ', e.code
     else:
           .............

urlopen重回的对答对象response有四个很有用的艺术info(卡塔尔(英语:State of Qatar)和geturl(卡塔尔(英语:State of Qatar)
geturl — 这几个重回获取的实际的UCR-VL,这些很有用,因为urlopen(或然opener对象使用的卡塔尔也许
会有重定向。获取的U兰德库罗德L恐怕跟需要ULacrosseL差异。
Data数据
一时你愿意发送一些数目到UKugaL
post方式:

 

 

 

req = urllib2.Request('')
try:
   urllib2.urlopen(req)
except URLError, e:
   print e.reason
   print e.code
   print e.read()

       HTTPConnection类的构造函数,表示叁次与服务器之间的相互,即诉求/响应。参数host表示服务器主机,如:;port为端口号,私下认可值为80; 参数strict的 暗中同意值为false, 表示在不能拆解深入分析服务器重返的动静行时( status line卡塔尔(英语:State of Qatar) (比较独立的气象行如: HTTP/1.0 200 OK ),是或不是抛BadStatusLine 分外;可选参数timeout 表示超时时间。
HTTPConnection提供的议程:

 

 

使用Basic HTTP Authentication:

 

 

 

或者:

提及底索要潜心的正是,当管理U中华VLError和HTTPError的时候,应先处理HTTPError,后甩卖UCRUISERLError
Openers和Handlers:
opener使用操作器(handlers)。全部的重活都提交那几个handlers来做。每一个handler知道
怎么展开url以风流罗曼蒂克种奇特的url合同(http,ftp等等),只怕怎么管理张开url的有些地方,如,HTTP重定向,或许HTTP
cookie。
默许opener有对日常景况的操作器 (handlers)- ProxyHandler, UnknownHandler, HTTPHandler,
HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.
再看python API:Return an OpenerDirector instance, which chains the handlers in the order given
那就越是证实了少数,那便是opener能够充当是二个容器,那几个容器个中放的是调整器,私下认可的,容器个中有三个控制
器,程序猿也可以步入自个儿的调整器,然后那些调节器去干活。

import httplib
conn = httplib.HTTPConnection("google.com")
conn.request('get', '/')
print conn.getresponse().read()
conn.close()

data['name'] = 'Somebody Here'
data['location'] = 'Northampton'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
url = ''
full_url = url   '?'   url_values
data = urllib2.open(full_url) 

import httplib
conn = httplib.HTTPConnection("www.g.com", 80, False)
conn.request('get', '/', headers = {"Host": "www.google.com",
                                    "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",
                                    "Accept": "text/plain"})
res = conn.getresponse()
print 'version:', res.version
print 'reason:', res.reason
print 'status:', res.status
print 'msg:', res.msg
print 'headers:', res.getheaders()
#html
#print 'n'   '-' * 50   'n'
#print res.read()
conn.close() 

 

二、使用urllib2,太强大

HTTPConnection.request ( method , url [ , body [ , headers ]] )

req = urllib2.Request('ftp://pythoneye.com')

 

 

 get方式:

 

 

import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
                          uri='',
                          user='user',
                          passwd='pass')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
urllib2.urlopen('. pythoneye.com/app.html')

values ={'body' : 'test short talk','via':'xxxx'}
data = urllib.urlencode(values)
req = urllib2.Request(url, data)

  1. #!/usr/bin/python  
  2. # -*- coding:utf-8 -*-  
  3. # httplib_test.py  
  4. # author:wklken  
  5. # 2012-03-17  wklken#yeah.net   
  6. def use_httplib():  
  7.   import httplib  
  8.   conn = httplib.HTTPConnection("www.baidu.com")  
  9.   i_headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",  
  10.              "Accept": "text/plain"}  
  11.   conn.request("GET", "/", headers = i_headers)  
  12.   r1 = conn.getresponse()  
  13.   print "version:", r1.version  
  14.   print "reason:", r1.reason  
  15.   print "status:", r1.status  
  16.   print "msg:", r1.msg  
  17.   print "headers:", r1.getheaders()  
  18.   data = r1.read()  
  19.   print len(data)  
  20.   conn.close()  
  21.   
  22. if __name__ == "__main__":  
  23.   use_httplib() 

 

调用request 方法会向服务器发送一遍呼吁,method 表示央浼的格局,常用有主意有get 和post ;url 表示央求的财富的url ;body 代表提交到服务器的数据,必须是字符串(要是method 是”post” ,则足以把body 驾驭为html 表单中的数据);headers 表示需要的http 头。
HTTPConnection.getresponse ()
赢得Http 响应。重临的目的是HTTPResponse 的实例,关于HTTPResponse 在底下 会讲明。
HTTPConnection.connect ()
连接到Http 服务器。
HTTPConnection.close ()
关门与服务器的连天。
HTTPConnection.set_debuglevel ( level )
安装中度的等第。参数level 的暗中同意值为0 ,表示不出口任何调节和测验新闻。
httplib.HTTPResponse
HTTPResponse表示服务器对顾客端央浼的响应。往往经过调用HTTPConnection.getresponse(卡塔尔(英语:State of Qatar)来创立,它犹如下方法和质量:
HTTPResponse.read([amt])
获得响应的音信体。假若央求的是叁个弃之可惜的网页,那么该方法重返的是页面包车型大巴html。可选参数amt表示从响应流中读取钦赐字节的多寡。
HTTPResponse.getheader(name[, default])
赢得响应头。Name表示头域(header 田野(field)卡塔尔(قطر‎名,可选参数default在头域名子虚乌有的情事下作为暗中认可值重回。
HTTPResponse.getheaders()
以列表的款式重返全部的头新闻。
HTTPResponse.msg
获取具备的响应头音信。
HTTPResponse.version
获得服务器所选拔的http合同版本。11意味着http/1.1;10意味http/1.0。
HTTPResponse.status
收获响应的状态码。如:200代表央浼成功。
HTTPResponse.reason
归来服务器管理要求的结果表明。经常为”OK”
下边通过三个例子来熟稔HTTPResponse中的方法:

 

生机勃勃、httplib完毕了HTTP和HTTPS的客户端左券,日常不直接使用,在python更加高层的包装模块中(urllib,urllib2)使用了它的http实现。

httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )

proxy_handler = urllib2.ProxyHandler({'http': ')
proxy_auth_handler = urllib2.HTTPBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')

本文由美高梅4858官方网站发布,转载请注明来源

关键词: 图片 打不开 代理服务器 洛克