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中通过threading模块定义和调用线程的方法
Jul 12 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
python组合无重复三位数的实例
Nov 13 Python
Python 获取 datax 执行结果保存到数据库的方法
Jul 11 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Python绘制股票移动均线的实例
Aug 24 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
pyspark 随机森林的实现
Apr 24 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
python如何用matplotlib创建三维图表
Jan 26 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保存任意网络图片到服务器的方法
2015/04/14 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
学习面向对象之面向对象的术语
2010/11/30 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
深入解析Vue 组件命名那些事
2017/07/18 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
Python pymongo模块常用操作分析
2018/09/01 Python
python安装gdal的两种方法
2019/10/29 Python
基于python实现把图片转换成素描
2019/11/13 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
中学老师的自我评价
2013/11/07 职场文书
党校培训思想汇报
2013/12/30 职场文书
新品发布会主持词
2014/04/02 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
考试作弊检讨
2015/01/27 职场文书
体育教师个人总结
2015/02/09 职场文书
暑期实践个人总结
2015/03/06 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python