最近想来学习一下关于python爬虫的技能。看了在bilibili上面的视频,学习了requests后面的一章。前面的一章没有时间写博文了,就掠过吧。人生第一篇博客 。
1.安装BeautifulSoup
由于演示使用的是python3,所以安装都一样。在控制台用pip install beautifulsoup4命令直接安装就可以了。我之前安装了完整的anaconda3,貌似直接集成在里面了。
2.使用
BeautifulSoup只能对已经是html的字符文件进行操作。先利用之前学过的方法,把所有爬虫弄到的信息保存成二进制形式:
import requests bs4 import BeautifulSoup url = = requests.get(url) demo = r.text
soup = BeautifulSoup(demo,'html.parser')
#这里soup就已经是一个可以进行识别处理的html文件格式,‘html.parser’是html相应的解释器
3.元素类型
BeautifulSoup库中共有5种元素类型,Tag,Name,Attributes,Navigablestring,commont。
Tag:<p class = "title">...</p>就是一个完整的Tag。
Name:上面例子中的name是‘p’,调用方法是soup.p.name
Attributes:上面class = “title”就是一个属性。属性可以有多个,组成的是一个字典,调用方法是soup.p.attrs,返回结果是一个字典
Navigablestring:一对尖括号之间的非属性字符串都是string,调用方法是soup.p.string,返回结果是一个字符串
for tag in soup.find_all(True): print(tag.name) #先找到所有的tag名字,然后对其进行处理
4.遍历方法
三种:上行,平行,下行
(1)上行遍历:寻找父辈标签节点。命令有soup.<tag>.parent/parents。parents只用于在for循环中的遍历过程。
#上行遍历的模板 for parent in soup.a.parents: if parent is None: print(parent) else: print(parent.name)
(2)平行遍历:寻找与当前标签同父标签的兄弟标签节点。命令有next_sibling,next_siblings,previous_sibling,previous_siblings。复数形式同样只用于循环结构中。
(3)下行遍历:寻找子标签节点。contents返回一个列表,其中包含了所有的查找子节点。children是对上述所有子节点进行遍历,只用于循环中。descendants用于寻找所有的子孙节点,只用于循环中。
5.网页信息的提取
提取信息的函数方法是find_all()
soup.find_all() #寻找soup中所有的标签 for tag in soup.find_all(): print(tag.name)