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解析中国天气网的天气数据
Mar 21 Python
Python实现的批量下载RFC文档
Mar 10 Python
python使用正则表达式提取网页URL的方法
May 26 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
Flask框架单例模式实现方法详解
Jul 31 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
python实现在一个画布上画多个子图
Jan 19 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
利用python实现汉诺塔游戏
Mar 01 Python
Python之matplotlib绘制饼图
Apr 13 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中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
php简单判断文本编码的方法
2015/07/30 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
财务管理专业求职信
2014/06/11 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
调研座谈会发言材料
2014/08/23 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2014年实习生工作总结
2014/11/27 职场文书
教育实习指导教师评语
2014/12/31 职场文书
2016公司年会主持词
2015/07/01 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
详解Python魔法方法之描述符类
2021/05/26 Python
Python 阶乘详解
2021/10/05 Python
7个关于Python的经典基础案例
2021/11/07 Python
java版 联机五子棋游戏
2022/05/04 Java/Android