Beautiful Soup学习

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!!
    # 类型为:<class 'bs4.element.NavigableString'>
    # 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])
 
posted @ 2016-01-07 11:33  thouger  阅读(188)  评论(0编辑  收藏  举报