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实现在线程里运行scrapy的方法
Apr 07 Python
Python实现文件复制删除
Apr 19 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
Python实现聊天机器人的示例代码
Jul 09 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python获取点击的坐标画图形的方法
Jul 09 Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
Python爬虫爬取有道实现翻译功能
Nov 27 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 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
短波问题解答
2021/02/28 无线电
漂亮但不安全的CTB
2006/10/09 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
python重要函数eval多种用法解析
2020/01/14 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
C语言面试题
2013/05/19 面试题
小学教师的个人自我鉴定
2013/10/26 职场文书
售后服务承诺书范文
2014/03/26 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
围城读书笔记
2015/06/26 职场文书
Golang 遍历二叉树
2022/04/19 Golang