Python爬虫使用bs4方法实现数据解析


Posted in Python onAugust 25, 2020

聚焦爬虫:

爬取页面中指定的页面内容。

编码流程:

  • 1.指定url
  • 2.发起请求
  • 3.获取响应数据
  • 4.数据解析
  • 5.持久化存储

数据解析分类:

  • 1.bs4
  • 2.正则
  • 3.xpath (***)

数据解析原理概述:

解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储

1.进行指定标签的定位

2.标签或者标签对应的属性中存储的数据值进行提取(解析)

bs4进行数据解析数据解析的原理:

1.标签定位

2.提取标签、标签属性中存储的数据值

bs4数据解析的原理:

1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

环境安装:

pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple

实例化BeautifulSoup对象步骤:

from bs4 import BeautifulSoup

对象的实例化:

1.将本地的html文档中的数据加载到该对象中

fp = open('./test.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml')

2.将互联网上获取的页面源码加载到该对象中(常用方法,推荐)

page_text = response.text
soup = BeatifulSoup(page_text,'lxml')

提供的用于数据解析的方法和属性:

soup.tagName:返回的是文档中第一次出现的tagName对应的标签
soup.find():
find('tagName'):等同于soup.div

1.属性定位:

soup.find('div',class_/id/attr='song')
soup.find_all('tagName'):返回符合要求的所有标签(列表)
select:
select('某种选择器(id,class,标签...选择器)'),返回的是一个列表。

2.层级选择器:

soup.select('.tang > ul > li > a'):>表示的是一个层级
soup.select('.tang > ul a'):空格表示的多个层级

3.获取标签之间的文本数据:

soup.a.text/string/get_text()
text/get_text():可以获取某一个标签中所有的文本内容
string:只可以获取该标签下面直系的文本内容

4.获取标签中属性值:

soup.a['href']

案例:爬取三国演义小说所有的章节标题和章节内容代码如下:

import requests
from bs4 import BeautifulSoup

if __name__ == "__main__":
  #对首页的页面数据进行爬取
  headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  }
  url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
  page_text = requests.get(url=url,headers=headers).text

  #在首页中解析出章节的标题和详情页的url
  #实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
  soup = BeautifulSoup(page_text,'lxml')
  #解析章节标题和详情页的url
  li_list = soup.select('.book-mulu > ul > li')
  fp = open('./sanguo.txt','w',encoding='utf-8')
  for li in li_list:
    title = li.a.string
    detail_url = 'http://www.shicimingju.com'+li.a['href']
    #对详情页发起请求,解析出章节内容
    detail_page_text = requests.get(url=detail_url,headers=headers).text
    #解析出详情页中相关的章节内容
    detail_soup = BeautifulSoup(detail_page_text,'lxml')
    div_tag = detail_soup.find('div',class_='chapter_content')
    #解析到了章节的内容
    content = div_tag.text
    fp.write(title+':'+content+'\n')
    print(title,'爬取成功!!!')

运行结果:

Python爬虫使用bs4方法实现数据解析
Python爬虫使用bs4方法实现数据解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取mp3文件信息的方法
Jun 15 Python
Python验证码识别的方法
Jul 10 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
python编程羊车门问题代码示例
Oct 25 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
Python列表(List)知识点总结
Feb 18 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 #Python
Python Selenium实现无可视化界面过程解析
Aug 25 #Python
一文读懂Python 枚举
Aug 25 #Python
详解python变量与数据类型
Aug 25 #Python
python获取百度热榜链接的实例方法
Aug 25 #Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 #Python
python实现自动清理重复文件
Aug 24 #Python
You might like
PHP分页显示制作详细讲解
2006/12/05 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
js实现筛选功能
2020/11/24 Javascript
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python机器学习实战之树回归详解
2017/12/20 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
学校教师安全责任书
2014/07/23 职场文书
2014年司机工作总结
2014/11/21 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
学者《孟子》名人名言
2019/08/09 职场文书