pythonurllib2图片
① python2 能使用requests吗
由于公司要用到模拟用户登录,于是用学校图书馆读者登录来进行练习。
工具是python2 + requests第三方库+火狐浏览器的firebug进行http抓包
目标 用python成功登录学校图书馆
接下来几篇会利用urllib和urllib2标准库进行登录
以下为具体步骤:
1 打开学校图书馆网址,以下为登录界面
综合以上分析,利用requests库进行模拟用户登录。这里的post参数采用了之前图片的源码形式,使得参数顺序匹配
import requests
url = "http://210.32.205.60/login.aspx"
# 学校图书馆登录url
header = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Connection":"keep-alive",
"Content-Type":"application/x-www-form-urlencoded",
"Host":"210.32.205.60",
"Referer": "http://210.32.205.60/login.aspx",
"Upgrade-Insecure-Requests":"1",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101 Firefox/54.0"
}
body = b'__VIEWSTATE=%uMtIIHXEj%&__VIEWSTATEGENERATOR=C2EE9ABB&__EVENTVALIDATION=%2FwEdAAbAeS%2BByzNg%%2FzVFQdp1z%2BnYWZ%%2BIuKmLNV%%3D%3D&DropDownList1=0&TextBox1=读者号&TextBox2=密码&ImageButton1.x=44&ImageButton1.y=12'r = requests.post(url, data=body, headers=header)
print r.text
以上为一次提交,没有进行重定向截取。
如果想用reque库截取重定向,在这个图书馆登录中则需要进行两次操作,这里相当于只做了post请求,头部,post参数都不变,只不过在requests.post()内设置了参数
r = requests.post(url, data=body, headers=header, allow_redirects=False)
# 设置 allow_redirects=False 使得禁止重定向
aspid = r.headers["Set-Cookie"] # 返回页面的头部的cookie
print r.status_code # 输出302
如果再想登陆图书馆页面,那么需要将cookie重新加入新的url上,进行get请求的提交,此时url为/Default.aspx.
url ="http://210.32.205.60/Default.aspx"
header = {
"Accept": "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*",
"Referer": "http://210.32.205.60/login.aspx",
"Accept-Language": "zh-CN",
"User-Agent": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)",
"Accept-Encoding": "gzip, deflate",
"Host": "210.32.205.60",
"Connection": "Keep-Alive",
"Pragma": "no-cache",
"Cookie": aspid
}
r = requests.get(url=url,headers=header)
print r.status_code
print r.text
接下来的几篇是利用python2的urllib2和urllib进行相同的模拟用户登录。
ps 由于urllib2处理重定向的时候不会将cookie带上,会导致页面不能正确爬取,所以要处理重定向。解决urllib重定向文章在此,分别介绍了urllib2自动处理重定向(带上cookie),和urllib2阻止重定向,返回cookie。
利用urllib2进行自动处理重定向,模拟浏览器提交post一次,就可以登录图书馆的文章在这。
利用urllib2处理重定向,使得重定向截断,获取cookie,根据cookie用代码实现重定向,登录图书馆的文章在此。
② Python爬虫是什么
为自动提取网页的程序,它为搜索引擎从万维网上下载网页。
网络爬虫为一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。
(2)pythonurllib2图片扩展阅读:
网络爬虫的相关要求规定:
1、由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。
2、按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。 当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。
3、文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能。
③ python中用urllib.retrieve下载网页图片时,由于权限问题不能下载
你是不是下载了要登录后才能看到的图片?可以试着加一下cookie
importcookielib
cj=cookielib.MozillaCookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
然后再添加user agent一起用试试看
④ 刚学python 求指教 ——抓取网站图片,图片保存到本地后无法打开,什么原因
这个网站给回来的是gzip过的数据,但是http头里面又没有声明gzip,所以就错了。
在保存文件的时候改成这样:
withopen(url2[-8:],"wb")ascode:
decompresser=zlib.decompressobj(16+zlib.MAX_WBITS)
data=decompresser.decompress(f.read())
code.write(data)
当然,别忘了import zlib
⑤ Python3.xx中写爬虫,下载图片除了urlretrieve方法,还有什么库的什么方法呢
Part 1. urllib2
urllib2是Python标准库提供的与网络相关的库,是写爬虫最常用的一个库之一。
想要使用Python打开一个网址,最简单的操作即是:
your_url = "http://publicdomainarchive.com/"html = urllib2.urlopen(your_url).read()12
这样所获得的就是对应网址(url)的html内容了。
但有的时候这么做还不够,因为目前很多的网站都有反爬虫机制,对于这么初级的代码,是很容易分辨出来的。例如本文所要下载图片的网站http://publicdomainarchive.com/,上述代码会返回HTTPError: HTTP Error 403: Forbidden错误。
那么,在这种情况下,下载网络图片的爬虫(虽然只有几行代码,但一个也可以叫做爬虫了吧,笑),就需要进一步的伪装。
要让爬虫伪装成浏览器访问指定的网站的话,就需要加入消息头信息。所谓的消息头信息就是在浏览器向网络服务器发送请求时一并发送的请求头(Request Headers)信息和服务器返回的响应头(Response Headers)信息。
例如,使用FireFox打开http://publicdomainarchive.com/时所发送的Request Headers的部分内容如下:
Host:"publicdomainarchive.com/"User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"...1234
还有一些其他属性,但其中伪装成浏览器最重要的部分已经列出来了,即User-Agent信息。
要使用Headers信息,就不能再仅仅向urlopen方法中传入一个地址了,而是需要将HTTP Request的Headers封装后传入:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}req = urllib2.Request(url = url, headers = headers)content = urllib2.urlopen(req).read()123
这样,就获得了网站的html内容。
接下来,就需要从html去获取图片的链接。
Part 2. HTMLParser
HTMLParser是Python提供的HTML解析库之一。
但Python提供的这个类中很多方法都没有实现,因而基本上这个库只负责进行解析,但解析完了什么都不做。所以如果需要对HTML中的某些元素进行加工的话,就需要用户自己去实现其中的一些方法。本文仅实现其中的handle_starttag方法:
class MyHTMLParser(HTMLParser): #继承HTMLParser类
def __init__(self): #初始化
HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):
#参数tag即由HTMLParser解析出的开始标签,attrs为该标签的属性
if tag == "img": #下载图片所需要的img标签
if len(attrs) == 0: pass
else: for (variable, value) in attrs: #在attrs中找到src属性,并确定其是我们所要下载的图片,最后将图片下载下来(这个方法当然也有其他的写法)
if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)123456789101112131415
Part 3. 下载图片
从handle_starttag方法中,我们已经获得了图片的url,那么,最后一步,我们要下载图片了。
当然,要获得网络上的图片,自然也需要向服务器发送请求,一样需要用到urllib2这个库,也需要用到上面所用到的请求头。
以下是down_image()方法的主要代码:
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()1234
因为这次打开的网址是个图片,所以urllib2.urlopen(req).read()所获取的就是图片的数据,将这些数据需要以二进制的方式写入本地的图片文件,即将图片下载下来了。
因为图片的url的最后一部分是图片的名字,所以可以直接用做本地的文件名,不用担心命名冲突,也不用担心后缀不符,很是方便。
Part 4. getFreeImages.py
这个下载图片的脚本的完整代码如下:
import urllib2,osfrom HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self) #self.links = {}
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "img": if len(attrs) == 0: pass
else: for (variable, value) in attrs: if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)def down_image(url,file_name):
global headers
req = urllib2.Request(url = url, headers = headers)
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()if __name__ == "__main__":
img_dir = "D:\\Downloads\\domain images"
if not os.path.isdir(img_dir):
os.mkdir(img_dir)
os.chdir(img_dir) print os.getcwd()
url = ""
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}
all_links = []
hp = MyHTMLParser() for i in range(1,30):
url = 'http://publicdomainarchive.com/public-domain-images/page/' + str(i) + '/'
req = urllib2.Request(url = url, headers = headers)
content = urllib2.urlopen(req).read()
hp.feed(content)
hp.close()041424344454647484950
⑥ python上传图片头像。一个post 提交不知道怎么写这样的
首先你需要在你的表单上添加enctype="multipart/form-data"。
<formaction="/message/"enctype="multipart/form-data"method="post">
<inputtype="file"name="picfile">
<buttonvalue="提交"type="submit">提交</button>
</form>
其次看你后端的web框架,如果是django,你可以参考。
fromPILimportImage
try:
reqfile=
request.FILES['picfile']#picfile要和html里面一致
img=Image.open(reqfile)
img.thumbnail((500,500),Image.ANTIALIAS)#对图片进行等比缩放
img.save("/Users/bcc/Desktop/python/bbs/Image/a.png","png")#保存图片
exceptException,e:
returnHttpResponse("Error%s"%e)#异常,查看报错信息
如果解决了您的问题请采纳!
如果未解决请继续追问
⑦ Python如何获取图片长宽等信息
使用PIL模块,windows安装包下载:
http://www.pythonware.com/procts/pil/
使用方法
#coding:utf8
#获取指定图片的长和宽
fromPILimportImage
img=Image.open("img.jpg")
printimg.size
运行结果:
(52,54)
⑧ python为什么叫爬虫
因为python的脚本特性,易于配置,对字符的处理也非常灵活,就像虫子一样灵活,故名爬虫。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。
Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
扩展资料
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。
并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。
例如if语句:python3。