BeautifulSoup网页解析器

    xiaoxiao2024-02-18  144

    1.获取网页源码信息

    主要利用urllib2,它比urllib可以设置超时参数

    import urllib2 # 获取网页源码 def get_html(url): # 设置失败次数 failureCount = 1 while True: try: # 允许重试次数 if failureCount >= 10: break req = urllib2.Request(url) # 10为超时时间 response = urllib2.urlopen(req, None, 10) page = response.read() except: failureCount += 1 print '网络连接出现问题, 正在尝试第'+failureCount+'次请求: ' else: break return page

    2.创立BeatufiulSoup、html.parser与lxml结构化解析解析

    from bs4 import BeautifulSoup def beautifulSoup(htmlStr): # htmlStr为网页源码 soup = BeautifulSoup(htmlStr, 'html.parser', # HTML解析器 from_encoding='utf-8' # HTML文档编码 ) return soup

    3.Beatufiul解析html后创立的四种对象

    3.1 Tag(直接访问标签)

    3.3.1 直接访问遇到的第一个该标签

    soup.title soup.head soup.a soup.p # 获取该标签下的所有属性,返回一个字典 soup.p.attrs # 获取该节点下的某个属性 soup.p['class'] soup.p.get('class')

    3.3.2 修改某个节点

    soup.p['class']="a"

    3.3.3 删除某个节点

    del soup.p['src']

    3.2 NavigableString获取标签内部文字 .string,如果节点中间有注释符号,则符号不会输出,但注释内容会输出

    soup.a.string

    3.3 BeautifulSoup表示网页所有源码,可以当成Tag使用

    3.4 Comment当标签内部文字是注释的时候,会返回bs4.element.Comment类型

    4 遍历节点

    4.1 获取一个节点下的所有直接子节点

    contents将某个节点下的所有子节点以列表的形式返回

    soup.head.contents

    .children是获取一个节点下的所有子节点列表生成器

    4.2 获取所有字符串内容 .strings

    4.3 父节点 p.parent

     

    5  搜索节点

    5.1 搜索所有<div>节点soup.find_all()

    soup.find_all('div')

    5.2 增加搜索条件

    # 查找所有类名为news-b的<div>节点 labelList = soup.find_all('div', class_='news-b') # 可以结合正则表达式 soup.find_all('div', href=re.compile(r'/hehe/\d+\.html'))

    5.3 查找某个节点soup.find()

    labelList = soup.find('div', class_='news-b')

    5.4 多次连续查找

    picture = soup.find('div', class_='news-banner clearfix').find_all('img')

    5.5 同时查找多个节点

    # 同时查找标签a和b的内容 soup.find_all(["a", "b"])

    5.6 访问节点中的文字信息get_text()

    labelList = soup.find('div', class_='news-b').get_text()

     

    最新回复(0)