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读文件逐行处理的示例代码分享
Dec 27 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
Python3.5字符串常用操作实例详解
May 01 Python
python3.7简单的爬虫实例详解
Jul 08 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
Python实现捕获异常发生的文件和具体行数
Apr 25 Python
python 实现表情识别
Nov 21 Python
python全栈开发语法总结
Nov 22 Python
Python urlopen()参数代码示例解析
Dec 10 Python
django如何自定义manage.py管理命令
Apr 27 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
php 禁止页面缓存输出
2009/01/07 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
php新建文件的方法实例
2019/09/26 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
解决pycharm界面不能显示中文的问题
2018/05/23 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python机器学习库xgboost的使用
2020/01/20 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
python 实现波浪滤镜特效
2020/12/02 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
质量标语大全
2014/06/12 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
老兵退伍感言
2015/08/03 职场文书
教师节随笔
2015/08/15 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL