码迷,mamicode.com
首页 > 其他好文 > 详细

小白,BeautifulSoup初步整理,后续添加

时间:2018-08-15 18:37:26      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:字符   结果   htm   bs4   表达式   数组   字符串   ring   对象   

form bs4 import BeautifulSoup
要导入bs4模块
注意BeautifulSoup大小写
soup = BeautifulSoup(‘html‘,‘html.parser‘)
第一个参数html为要解析的html文档,html是字符串

解析到soup中后才可以开始使用

soup中用的比较多的方法为find_all()
用法有:
soup.find_all(‘a‘)//找出所有的a标签中的内容,返回的是一个数组,数组中的每个元素又是BeautifulSoup对象
find_all()中还可以加属性查询,如:soup.findall(‘a‘,class=‘‘),如果有多个,可以soup.findall(‘a‘,class=[‘c1‘,‘c2‘]),class_中的内容为样式,只要查找的内容中有其中一个样式就行
如:
s = ‘‘‘<a href=‘xxx‘ class=‘c1‘>aaaaaaa</a>
<a href=‘xxx‘ class=‘c2‘></a>
<a href=‘xxx‘ class=‘c1 c3‘></a>
<a href=‘xxx‘ class=‘c1 c2‘></a>‘‘‘
这里面的都可以找出来
还有一种写法:
soup.find_all(‘a‘,attrs={‘class‘:re.compile(‘‘)}),使用正则表达式,

拿到查找内容后,如果要解析标签中的内容
find_all()要循环取
假设拿到其中一个,以a标签为例
拿到的a1 = ‘<a href=‘xxx‘ class=‘c1‘>‘
拿链接:href = a1[‘href‘]
拿标签中的内容:content = a1.string

BeautifulSoup中还有find方法,用法与find_all()一样,只是该方法只取第一个符合条件的

注:如果标签不是成对的,如:<span><img src=‘xxxx‘ ></span>
此时,你用find(‘img‘)是拿不到img标签的,你需要取到他的上级成对标签span
然后在解析span标签中的内容,如
span = soup.find(‘span‘),假设拿到的是‘<span><img src=‘xxxx‘ ></span>‘
此时你需要解析他的子标签,使用children属性
span.children
此时返回的结果是list_itrator对象,要么使用for循环去取,没试过,要么使用next(list_itrator)取,可以拿到第一个子标签<img>
然后拿到src的值:src = next(list_itrator)[‘src‘]
当然如果标签是成对的,直接使用find(‘img‘)
注:
使用BeautifulSoup,以后所有返回带有标签内容的对象都是BeautifulSoup对象(个人理解)
如果要分析的内容太多,可以将需要的字符串内容截取到合适的地方,因为BeautifulSoup解析实在是太耗时间了,虽然方便

小白,BeautifulSoup初步整理,后续添加

标签:字符   结果   htm   bs4   表达式   数组   字符串   ring   对象   

原文地址:http://blog.51cto.com/zhangmyname/2160368

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!