爬虫python,python怎么爬虫
Python技术-基础篇-常用第三方模块枕头和请求的技术博客_mb5c9304c35413c _博客
1.枕头
PIL:Python图像库,这是Python平台上图像处理事实上的标准库。PIL非常强大,但是API非常简单易用。
由于PIL只支持Python 2.7,而且年久失修,一群志愿者基于PIL创建了一个兼容版本,命名为Pillow,它支持最新的Python 3.x,并增加了许多新功能。因此,我们可以直接安装和使用枕头。
安装枕头如果安装了Anaconda,枕头已经可用。否则,您需要通过命令行中的pip进行安装:
$ pip安装pillow如果遇到权限被拒绝安装失败,请添加sudo重试。
操纵图像查看最常见的图像缩放操作,只需三四行代码:
从PIL进口图片
#打开一个jpg图像文件,注意它是当前路径:
im=Image.open(test.jpg )
#获取图像大小:
w,h=im.size
打印(原始图像尺寸:%sx%s %(宽,高))
#缩放至50%:
im.thumbnail((w//2,h//2))
print(将图像大小调整为:%sx%s % (w//2,h//2))
#以jpeg格式保存缩放后的图像:
Im.save(thumbnail.jpg , jpeg )切片、旋转、滤镜、输出文本、调色板等其他功能。都是现成的。
例如,模糊效果只需要几行代码:
从PIL导入图像,图像过滤器
#打开一个jpg图像文件,注意它是当前路径:
im=Image.open(test.jpg )
#应用模糊滤镜:
im2=im.filter(ImageFilter。模糊)
2.IMSave (blur.jpg , JPEG )具有以下效果:
PIL的ImageDraw提供了一系列的绘图方法,让我们可以直接绘图。例如,要生成信函验证码图片:
从PIL导入图像,图像绘制,图像字体,图像过滤器
随机导入
#随机字母:
def rndChar():
return chr(random.randint(65,90))
#随机颜色1:
def rndColor():
return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
#随机颜色2:
def rndColor2():
return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
# 240 x 60:
宽度=60 * 4
高度=60
image=Image.new(RGB ,(宽度,高度),(255,255,255))
#创建字体对象:
font=image font . truetype( arial . TTF ,36)
#创建一个绘图对象:
draw=ImageDraw。绘制(图像)
#填充每个像素:
对于范围内的x(宽度):
对于范围内的y(高度):
draw.point((x,y),fill=rndColor())
#输出文本:
对于范围(4)中的t:
draw.text((60 * t 10,10),rndChar(),font=font,fill=rndColor2())
#模糊:
image=image.filter(ImageFilter。模糊)
Image.save(code.jpg , jpeg )我们用随机颜色填充背景,绘制文字,最后模糊图像得到验证码图片如下:
如果在操作过程中报告了错误:
IO:无法打开资源这是因为PIL找不到字体文件。它可以根据操作系统提供绝对路径,例如:
/Library/Fonts/Arial.ttf 要了解更多关于PIL的强大功能,请参考枕头官方文档:
https://pillow.readthedocs.org/
PIL提供了强大的图像处理功能,可以用简单的代码完成复杂的图像处理。
2 .请求
我们已经解释了Python内置的urllib模块,该模块用于访问网络资源。但是使用起来比较麻烦,缺少很多实用的高级功能。
更好的解决方案是使用请求。是Python第三方库,处理URL资源特别方便。
安装请求如果安装了Anaconda,则请求已经可用。否则,您需要通过命令行中的pip进行安装:
$ pip安装请求如果您遇到权限被拒绝安装失败,请添加sudo重试。
通过GET使用请求访问页面,只需要几行代码:
导入请求
r=requests . get( 3359 www.douban.com/)#豆瓣首页
r .状态代码
200
r .文本
r .文本
\ n \ n \对于带参数的URL,请将dict作为params参数传入:
r=requests . get( https://www . douban . com/search ,params={q: python , cat: 1001})
实际请求的url
https://www.douban.com/search?Q=python cat=1001 请求自动检测编码,可以使用encoding属性查看编码:
r编码
Utf-8 无论响应是文本还是二进制内容,我们都可以用content属性得到bytes对象:
r .内容
B\n\n\n\n . requests也很方便,因为对于特定类型的响应,比如JSON,您可以直接获得:
r=requests . get( https://query . Yahoo APIs . com/v1/public/yql?q=select * from weather . forecast where woeid=2151330 format=JSON )
r.json()
{query: {count: 1, created: 2017-11-17T07: 14: 12Z ,当我们需要传入一个HTTP头时,我们传入一个dict作为头参数:
r=requests . get( https://www . douban . com/,headers={ User-Agent : Mozilla/5.0(iPhone;CPU iPhone OS 11_0像Mac OS X) AppleWebKit})
r .文本
\ n \ n \ n \豆瓣(手机版).要发送post请求,只需将get()方法更改为POST(),然后传入data参数作为POST请求的数据:
r=Requests . post( 3359 accounts . douban . com/log in ,data={ form _ email : ABC @ example . com , form _ password : 123456 })Requests默认使用application/x-www-form-urlencode。如果要传递json数据,可以直接传入JSON参数:
params={key: value}
R=requests.post (URL,JSON=params) #内部自动序列化类似于JSON。上传文件需要更复杂的编码格式,但是requests将其简化为files参数:
upload _ files={ file :open( report . xls , rb)}
R=requests.post (URL,files=upload _ files)读取文件时,一定要使用 rb ,即二进制模式读取,这样得到的字节长度就是文件长度。
通过用PUT()、DELETE()等替换post()方法。您可以通过put或delete请求资源。
除了容易获得响应内容,requests还非常简单地获得HTTP响应的其他信息。例如,获取响应头:
r .标题
{ Content-Type : text/html;charset=utf-8 , Transfer-Encoding: chunked , Content-Encoding: gzip ,}
r.headers[Content-Type]
文本/html;Charset=utf-8requests对cookie进行了特殊处理,这样我们就可以轻松地获取指定的cookie,而无需解析它们:
r.cookies[ts]
Example_Cookie_12345 要在请求中传入Cookie,只需准备一个dict传入Cookie参数:
cs={token: 12345 ,状态: 正在工作 }
R=requests.get(url,cookies=cs)最后,要指定超时,请传入以秒为单位的超时参数:
R=requests.get (URL,timeout=2.5) #超时后2.5秒摘要用请求获取URL资源,就这么简单!
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。