• beautifulsoup解析


    beautifulsoup解析

    python独有

    优势:简单、便捷、高效
    - 环境安装  需要将pip源设置为国内源
    -需要安装:pip install bs4
        bs4在使用时需要一个第三方库
        pip install lxml

    流程:
    核心思想:可以将html文档转换成Beautiful对象,然后调用对象属性和方法进行html指定内容的定位和查找
    • 1.导包
    • 2.创建Beautiful对象:
      • 如果html文档来源于本地:Beautiful('open('本地html文件)',lxml)
      • 如果html文档来源于网络:Beautiful('网络请求到的页面数据','lxml')
    • 3.使用方法和属性:
      • 根据标签名查找
        • soup.a 只能找到第一个符合要求的标签
      • 获取属性
        • soup.a.attrs 获取a所有的属性和属性值,返回一个字典
        • soup.a.attrs['href'] 获取href属性 也可以简写为 soup.a['href']
      • 获取内容
        • soup.a.string
        • soup.a.text
        • soup.a.get_text() 注意:如果标签还有标签,那么string获取的结果为None,而其他两个,可以获取文本内容 -find:找到第一个符合要求的标签
        • soup.find('a')
        • soup.find('a',title='xxx') 类似的
        • soup.find('a',id='xxx') -finAll 获取所有符合条件的标签
        • soup.findAll('a')
        • soup.findAll(['a','b']) 找到所有的a标签和b标签
        • soup.findAll('a',limit=2) 限制取前两个
      • 根据选择器选择指定的内容 soup.select() -常见的选择器:标签选择器、类选择器(.)、id选择器(#)、层级选择器
          - 层级选择器:
              div .dudu #lala 空格表示下面好多级
              div > p > a > .lala   > 只能是下面一级
        注意:select返回的永远是列表,可以通过下标提取指定的对象

    练习

    • 需求:爬取古诗文网中三国小说里的标题和内容
    import requests
    from bs4 import BeautifulSoup
    url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
    # 自定义请求头信息
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    
    }
    page_text = requests.get(url=url,headers=headers).text
    # 数据解析
    soup = BeautifulSoup(page_text,'lxml')
    li_list=soup.select('.book-mulu > ul > li > a')
    # type(li_list[0])  bs4.element.Tag Tag类型的数据可以继续调用属性方法进行解析
    f = open('./三国演义.txt','w',encoding='utf-8')
    for li in li_list:
        title = li.text
    #     print(type(title))
        conten_url ='http://www.shicimingju.com' + li.attrs['href']
        content_page = requests.get(url=conten_url,headers=headers).text
        content_soup = BeautifulSoup(content_page,'lxml')
        content = content_soup.select('.chapter_content')[0]
    #     print(content.text)
        f.write(title+content.text+'
    
    
    ')
        print(title+'  已写入')
  • 相关阅读:
    [转]写给刚工作的技术人员
    IT人士如何有效地学习
    一个学习Unity的网址,记下来以后用.
    .NET Remoting学习总结之一:Remoting的使用场景
    犯了不该犯的错:UNION和UNION ALL没搞清楚,今天写下它们的区别,要谨记在心!
    实用代码:单个读取Console中输入的键
    无意中试用了一下PostSharp,感觉很不错,看得出它对那些重复性的编程会有不少帮助.
    博客的搬迁历程
    .NET 6期 11月上旬教学计划(11月6日更新)
    .NET 6期 10月下旬教学计划(10月31日更新)
  • 原文地址:https://www.cnblogs.com/yuliangkaiyue/p/10001783.html
Copyright © 2020-2023  润新知