zoukankan      html  css  js  c++  java
  • python爬虫--解析网页几种方法之BeautifulSoup

    一.解析器概述

    soup=BeautifulSoup(response.body)

    对网页进行析取时,并未规定解析器,此时使用的是python内部默认的解析器“html.parser”。

      解析器是什么呢? BeautifulSoup做的工作就是对html标签进行解释和分类,不同的解析器对相同html标签会做出不同解释。

      举个官方文档上的例子:

    BeautifulSoup("<a></p>", "lxml")
    # <html><body><a></a></body></html>
    BeautifulSoup("<a></p>", "html5lib")
    # <html><head></head><body><a><p></p></a></body></html>
    BeautifulSoup("<a></p>", "html.parser")
    # <a></a>

      官方文档上多次提到推荐使用"lxml"和"html5lib"解析器,因为默认的"html.parser"自动补全标签的功能很差,经常会出问题。

    二、使用BeautifulSoup抓取新闻网站新闻标题。

    import requests
    from bs4 import BeautifulSoup
    link = "http://tuijian.hao123.com/finance"
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    r = requests.get(link, headers= headers)
    soup = BeautifulSoup(r.text,"html.parser")
    first_title = soup.find("div", class_="box-text").text 
    print ("第一篇文章的标题是:", first_title)
    title_list = soup.find_all("div", class_="box-text")
    for i in range(len(title_list)):
        title = title_list[i].text.strip()
        print ('第 %s 篇文章的标题是:%s' %(i+1, title))

    find_all找到所有结果,结果是一个列表。用一个循环,把标题列出。

     
    解析器使用方法优势劣势
    Python标准库 BeautifulSoup(markup, “html.parser”)
    • Python的内置标准库
    • 执行速度适中
    • 文档容错能力强
    • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
    lxml HTML 解析器 BeautifulSoup(markup, “lxml”)
    • 速度快
    • 文档容错能力强
    • 需要安装C语言库
    lxml XML 解析器 BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”)
    • 速度快
    • 唯一支持XML的解析器
    • 需要安装C语言库
    html5lib BeautifulSoup(markup, “html5lib”)
    • 最好的容错性
    • 以浏览器的方式解析文档
    • 生成HTML5格式的文档
    • 速度慢
  • 相关阅读:
    python正则表达式re模块
    frp+proxifier实现内网socks5反向代理
    新版kali 添加root权限用户,和字体颜色解决办法
    通达OA 11.6 RCE 漏洞(含EXP,POC,环境)
    水泽信息收集自动化工具(安装教程)
    宝塔面板phpmyadmin未授权访问漏洞
    greenplum窗口函数使用浅析
    执果索因调整greenplum table dk值
    greenplum分区表查看所占空间大小
    greenplum查看表的数据分布情况来调整dk值
  • 原文地址:https://www.cnblogs.com/leon507/p/7622444.html
Copyright © 2011-2022 走看看