数据解析-bs4

环境安装

  1. - 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
  2. - windows
  3. 1)打开文件资源管理器(文件夹地址栏中)
  4. 2)地址栏上面输入 %appdata%
  5. 3)在这里面新建一个文件夹 pip
  6. 4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
  7. [global]
  8. timeout = 6000
  9. index-url = https://mirrors.aliyun.com/pypi/simple/
  10. trusted-host = mirrors.aliyun.com
  11. - linux
  12. 1cd ~
  13. 2mkdir ~/.pip
  14. 3vi ~/.pip/pip.conf
  15. 4)编辑内容,和windows一模一样
  16. - 需要安装:pip install bs4
  17. bs4在使用时候需要一个第三方库,把这个库也安装一下
  18. pip install lxml

基础使用

  1. 使用流程:
  2. - 导包:from bs4 import BeautifulSoup
  3. - 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的节点内容
  4. 1)转化本地文件:
  5. - soup = BeautifulSoup(open('本地文件'), 'lxml')
  6. 2)转化网络文件:
  7. - soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')
  8. 3)打印soup对象显示内容为html文件中的内容
  9. 基础巩固:
  10. 1)根据标签名查找
  11. - soup.a 只能找到第一个符合要求的标签
  12. 2)获取属性
  13. - soup.a.attrs 获取a所有的属性和属性值,返回一个字典
  14. - soup.a.attrs['href'] 获取href属性
  15. - soup.a['href'] 也可简写为这种形式
  16. 3)获取内容
  17. - soup.a.string
  18. - soup.a.text
  19. - soup.a.get_text()
  20. 【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
  21. 4find:找到第一个符合要求的标签
  22. - soup.find('a') 找到第一个符合要求的
  23. - soup.find('a', title="xxx")
  24. - soup.find('a', alt="xxx")
  25. - soup.find('a', class_="xxx")
  26. - soup.find('a', id="xxx")
  27. 5find_all:找到所有符合要求的标签
  28. - soup.find_all('a')
  29. - soup.find_all(['a','b']) 找到所有的ab标签
  30. - soup.find_all('a', limit=2) 限制前两个
  31. 6)根据选择器选择指定的内容
  32. select:soup.select('#feng')
  33. - 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器
  34. - 层级选择器:
  35. div .dudu #lala .meme .xixi 下面好多级
  36. div > p > a > .lala 只能是下面一级
  37. 【注意】select选择器返回永远是列表,需要通过下标提取指定的对象

项目巩固

需求:使用bs4实现将诗词名句网站中三国演义小说的每一章的内容爬去到本地磁盘进行存储 http://www.shicimingju.com/book/sanguoyanyi.html

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import requests
  4. from bs4 import BeautifulSoup
  5. headers={
  6. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
  7. }
  8. def parse_content(url):
  9. #获取标题正文页数据
  10. page_text = requests.get(url,headers=headers).text
  11. soup = BeautifulSoup(page_text,'lxml')
  12. #解析获得标签
  13. ele = soup.find('div',class_='chapter_content')
  14. content = ele.text #获取标签中的数据值
  15. return content
  16. if __name__ == "__main__":
  17. url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
  18. reponse = requests.get(url=url,headers=headers)
  19. page_text = reponse.text
  20. #创建soup对象
  21. soup = BeautifulSoup(page_text,'lxml')
  22. #解析数据
  23. a_eles = soup.select('.book-mulu > ul > li > a')
  24. print(a_eles)
  25. cap = 1
  26. for ele in a_eles:
  27. print('开始下载第%d章节'%cap)
  28. cap+=1
  29. title = ele.string
  30. content_url = 'http://www.shicimingju.com'+ele['href']
  31. content = parse_content(content_url)
  32. with open('./sanguo.txt','w') as fp:
  33. fp.write(title+":"+content+'\n\n\n\n\n')
  34. print('结束下载第%d章节'%cap)
posted @ 2021-03-22 13:45  好吗,好  阅读(71)  评论(0)    收藏  举报