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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
python生成随机红包的实例写法
Sep 02 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
Python有参函数使用代码实例
Jan 06 Python
python有序查找算法 二分法实例解析
Feb 18 Python
Python如何读写二进制数组数据
Aug 01 Python
class类在python中获取金融数据的实例方法
Dec 10 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数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP生成随机密码类分享
2014/06/25 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
php经典趣味算法实例代码
2020/01/21 PHP
javascript比较文档位置
2008/04/08 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
keras实现多种分类网络的方式
2020/06/11 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
劳资人员岗位职责
2013/12/19 职场文书
文案策划求职信
2014/04/14 职场文书
高三学生评语大全
2014/04/25 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
民间借贷被告代理词
2015/05/23 职场文书
高一化学教学反思
2016/02/22 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
使用pandas模块实现数据的标准化操作
2021/05/14 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技