Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
-
Tag
- print soup.title #<title>The Dormouse's story</title>
- 两个重要属性 name和attrs soup.title.name 输出标签名字 soup.title.attrs 输出标签属性
- soup.title.string输出标签内部文字
-
NavigableString
-
BeautifulSoup
-
Comment
http://cuiqingcai.com/1319.html暂时学到这里
# == find_all()之搜索标签名称 ============ OK # result = soup.find_all('dl') # OK # == find_all()之搜索标签属性 ============ not all OK # result = soup.find_all(id='newlist_list_div') # OK # result = soup.find_all(href=re.compile('.htm')) # Failed 竟然不支持href搜索,和官方说的不一样 # result = soup.find_all(name='vacancyid') # Failed 不支持标签的name属性搜索 # == find_all()之按CSS搜索 ============ OK # result = soup.find_all('div', class_='clearfix') # OK # result = soup.find_all('div', class_=re.compile('newlist_detail')) # OK # result = soup.find_all(class_=re.compile('newlist_detail')) # OK # == find_all()之按内容text搜索 ============ # find_all()加上text参数后, # 返回的是字符串!而不是tag!! # 类型为:# result = soup.find_all(text='会计') # OK 内容必须完全相等才算!(不含子标签) # result = soup.find_all(text=u'数据') # OK 内容必须完全相等 无所谓unicode了 # result = soup.find_all(text=re.compile(u'学历:')) # OK unicode是绝对要!否则不行!
下面总结了在BeautifulSoup中的语法搜索: 标签搜索,如:'input' ,搜索所有标签为input的元素 宽泛路径,如:'body a' ,就是body内所有a元素 绝对路径,如:'body > div > div > p' ,必须完全符合路径才能搜到 ID搜索 ,如:'#tag-1' ,搜索id为tag1的标签 混合搜索,如:'div #tag1', 搜索id为xx的div标签 'div[class*=newlist_detail] ~ div[class*=newlist_detail]' ,大混合 属性存在,如:'a[href]' ,搜索所有存在href属性的a标签 类名搜索,如:'[class=clearfix]' ,找到class名等于clearfix的标签 '[class^=newlist_detail]' ,找到class名中以"newlist_detail"开头的标签 '[class$=zwmc]' ,找到class名中以"zwmc"结尾的标签 '[class*=clearfix]' ,找到class名中包含"zwmc"的标签 兄弟搜索,如: '#links ~ .clearfix' ,找到id为links标签的所有class等于"clearfix"的兄弟标签 '#links + .clearfix' ,找到id为links标签的下一个class等于"clearfix"的兄弟标签 序列搜索,如:'p nth-of-type(3)' ,这个说白了就是选择第3个p标签 'p nth-of-type(odd)' 表示奇数的p标签 'p nth-of-type(even)' 表示偶数的p标签 'p nth-of-type(n)' 表示所有的p标签 'p nth-of-type(3n)' 表示3的倍数的p标签 'p nth-of-type(4n+1)' 表示4的倍数加1的p标签,如第5个、第9个 ''' # result = soup.select('dl > p') # OK tag路径搜索 # result = soup.select('div[class*=newlist_detail] ~ div') # OK 各种混合搜索 # result = soup.select('[class*=zwmc]') # OK 各种混合搜索 con = soup.select('div[class^=newlist_detail]')[0] result = con.select('[class*=zwmc]') # print type(result[0])