一. 避开复杂HTML的解析
二. BeautifulSoup简介
三. 正则表达式与BeautifulSoup
四. 获取属性
五. Lambda表达式
六. 类似的BeautifulSoup库
一. 避开复杂HTML的解析
1. 查看该网页有没有网页结构更友好的移动版,
通过设置自己的请求头可以来访问移动版。
2. 寻找隐藏在JavaScript文件中的信息。
3. 查看该信息是否可以从其他网页中获取到。
二. BeautifulSoup简介
通过BeautifulSoup可以方便的获取结构化的数据。
1. get_text()方法
2. BeautifulSoup的find()和findAll()方法
3. 其它BeautifulSoup对象
4. 导航树
1. get_text()方法
在获取到BeautifulSoup对象后,调用其.get_text()会把该对象
里面的所有标签都全部去掉,以文本字符串的形式返回里面的内容。
2. BeautifulSoup的find()和findAll()方法
findAll(tag,attribute,recursive,text,limit,keywords)
(1) 标签参数tag
可以是一个标签的名称也可以是一个列表
例如查找一个html中的所有标题标签
.findAll(['h1','h2','h3','h4','h5'])
.findAll('h1')
(2) 属性参数attributes
是用一个字典封装一个标签的若干属性和对应的属性值。
返回HTML文档中里所有的红色与绿色标签
.findAll("span",{"class":["green","red"]})
(3) 递归参数recursive
是一个布尔变量。
True 会查找所有的后代标签
False 只查找子标签
(4) 文本参数text
是对标签里面的文本内容做匹配。
例如查找标签中the prince 的标签数量
nameList = obj.findAll(text="the prince")
print len(nameList)
(5) 限制参数limit
当指定limit=1,便是find()方法.只返回第一个查找到的对象
(6) 关键字参数 keywords
如bsObj.findAll(id="text")
返回id为text的对象,由于属性关键字可以完全是实现其功能
所以不推荐使用该参数,且有时使用该参数时会发生奇怪的错误。
3. 其它BeautifulSoup对象
NavigableString对象用来表示标签里的文字而非标签
Comment对象用来表示HTML文档的注释标签
4. 导航树
(1) 处理子标签和其他后代标签
children 属性获取所有子标签
descendant 属性获取所有后代标签
(2) 处理兄弟标签
beautifulsoup对象的 next_sibings 属性
(获取之后的所有兄弟标签)加上get_text()
方法使得处理表格十分的方便。
(3) 处理父标签
parent 属性
三. 正则表达式与BeautifulSoup
正则表达式可以作为beautifulsoup的语句的任一个参数使用,
让目标元素的查找更加的方便。
例如查找图片中的src属性值以../img/gifts/img开头,以.jpg结尾
images = bsObj.findAll("img":
{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
四. 获取属性
获取一个标签对象的全部属性返回一个字典
且对象的属性值为列表的形式
myTag.attrs
获取某一个属性
myTag.attrs["someAttr"][0]
五. Lambda表达式
BeautifulSoup允许我们把一个lambda表达式
当做findAll函数的参数。唯一的限制条件是必须
把一个标签作为参数且返回的结果是布尔类型。
beautifulsoup用这个函数来判断它遇到的每一个标签对象,
最后把评估结果为“真”的标签保留,把其他标签去除。
例如: 获取有两个属性的标签
soup.findAll(lambda tag: len(tag.attrs)==2)
六. 类似的BeautifulSoup库
lxml
和beautifulsoup一样优秀,里面的xpath甚至比beautifulsoup
还要快速方便,并且xpath里面的路径可以直接通过chrome来获取。
PyQuery
pyquery 可让用jQuery的语法来对xml进行操作。非常像jQuery API而已。
HTML parser
python自带的解析库,不用安装可以直接使用。
点击查看更多内容
6人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦