🔥 CSS被我撸坏了… 重新排版中。

[Python] 关于BeautifulSoup取得标签属性时,单行代码输出列表的方法

讲真,bs4 这个 find_all 取回的 Tag 对象,操作逻辑对新手来讲不太友好,多层的操作对象很容易绕晕人。


目前我自己的操作流程是

  1. 执行 bs4.BeautifulSoup 取得基础的 Soup 对象
  2. Soup对象.find_all('标签')
  3. 标签[引索].attrs['属性']

为了节省篇幅,我采用列表推导式的方法来输出属性值列表

比如,我 find_all 得到的标签数组赋值到 img 这个变量上,默认直接取得已存在的值是没问题的:

[i.attrs['src'] for i in img]

‘图片标签不带路径’通常不会有人这么干啊… 所以一般不会出什么问题。
但是遇到想获取类似 data-url 这种自定义的属性名就蛋疼了。因为不是主要参数,不可能整个网页的img标签都带有这个属性,
导致循环遍历取 img.attrs 的字典时,如果找不到对应的 key 值,会直接报错并终止循环
我需要筛选出来,因此需要加个字典键值的判断:

if 'data-url' in img[引索].attrs.keys()
#直接判断某引索 img 标签的'data-url'键值是否存在。

那么完整的列表推导式就是如此:

[i.attrs['data-url'] for i in img if 'data-url' in i.attrs.keys()]

碎碎念

写这个记录的时候,我只是刚接触这个库,可能bs4官方已经提供了更便捷的取值方式只是我没找到吧。但还是记录下来方便自己忘记的时候查阅。如果是路人看到这篇文章请见谅,欢迎批评。


IMG_20180116_191608_HDR.jpg

发表新评论