beautifulsoup解析

Posted yuliangkaiyue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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+  已写入)

 

以上是关于beautifulsoup解析的主要内容,如果未能解决你的问题,请参考以下文章

Python - BeautifulSoup - 如何进行在线数据解析

解析库BeautifulSoup使用

使用 BeautifulSoup 解析 facebook

Python3.x的BeautifulSoup解析html常用函数

BeautifulSoup HTML 表格解析

将 BeautifulSoup 元素解析为 Selenium