----这次图片依然上传不成功,很难受,就当一篇日记了,下次完善,麻蛋
本次爬虫爬取的是电影网站 http://dianying.2345.com/top/
在这之前,介绍一下soup.find()和soup.find_all()的区别
比如
这是该网站的html的soup结构图,非常清晰,我们需要的电影信息在大标签<ul>下,
然后分成一个一个的<li>标签。
首先使用find()方法,比如寻找<li>标签,只得到了html第一个<li>标签。
而且是单纯的标签形式,而不是以列表的形式列出来的。
对于find_all()方法
返回值是一个list,每一个list元素都是一个<li>标签(可以<li>标签里面还嵌套
着一些其他标签,也就是说包括一些子标签,但是每一个list元素是<li>元素
具体分割见‘,’)
比如电影网站,并列的内容往往是由一个大标签,下面嵌套着许多同样的
标签表示的。
我们在fing特定的标签时候,往往输出一些相关属性的信息,我们如果用find_all
会得到一个列表,而不是直接的tag,比较麻烦,所以定位的时候往往使用
find( )方法。
然后在大标签下,就直接使用find_all()来得到一个list包含所以的并列tag信息,
然后进行提取。
本次爬取需要注意的是对图片的提取。
这是某一个img标签,img标签有两个必须的属性,src和alt,图像内容
被嵌套在src里面。同时,Tag['属性']可以提取出tag的属性值,比如
提取出的src属性值是图片的链接,即将这个url链接在网站中输入,可以得到
如果要获取这个URL的图像信息,我们需要用到requests包,先进行requests操作,
获取一个response对象,response对象有text和content属性。具体操作如下:
我们通过requests获取了一个response对象,response.text返回的是这个对象的
unicode类型的数据,而content返回的是二进制的数据(图片是以二进制的形式保存的)
所以text用于获取对象的文本信息,content用于获取对象的图像信息
然后用with open方法以二进制写入本地即可保存。
例如,从某网站上下载一张图片并且保存到本地:
其中wb+是以二进制的形式,并且如果该文件不存在,则创建文件(文件夹必须存在)
顺便记录一下print➕format的IO方法:
完整代码如下
结果如下: