在上一篇笔记的基础上,又继续优化了一下下~~
去看上一篇:https://blog.csdn.net/sinat_34937826/article/details/105494749
之前我是直接用了从1开始的数字作为爬下来图片的名称,但是后来发现在这个网页里,每张图片前面都会对应有一句话的介绍文字,有点喜欢~ 所以就想用网页里图片的描述作为对应图片下载后的名称,在这里记录一下实现过程吧。
首先还是分析网页
由于前面已经完成了图片的爬取,那么这次只需要观察描述文字的代码结构以及文字和对应图片代码结构的关系就行了。
简单记录一下分析过程吧~哈哈哈
- 本来以为每段文字前面都有一个
class="pictext"
,那么用bs.find_all('p', class_ = "pictext")
就可以一次性拿到所有class="pictext"
的p
标签了,(注意是class_,不是class,因为class是python的关键字,所以后面要加个尾巴,防止冲突),再从里面取出文字部分就好了,结果……有好几段描述文字前面都没有带class="pictext"
……优秀b( ̄▽ ̄)d - 那么这些文字的共同之处就只剩下一个了:p 标签。这样的话拿出每张图片前面一个 p 标签里的文字应该就可以了!
开始编码
以上图↑中秋香姐的图片的文字举例,之前爬取图片的时候是按照 img 标签来找的,所以图片对应的描述文字的位置就是的父标签的前一个标签了。
这里参考一下菜鸟教程里BeautifulSoup的文档~
BeautifulSoup对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性
.parent:获取Tag的父节点
.previous_sibling:获取当前Tag的上一个节点,属性通常是字符串或空白,真实结果是当前标签与上一个标签之间的顿号和换行符
.next_sibling:获取当前Tag的下一个节点,属性通常是字符串或空白,真是结果是当前标签与下一个标签之间的顿号与换行符
现在可以完成这部分的代码:
movie = soup.find_all('img')
for i in movie:
#爬取每个图片前面的那句话<