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中的getopt函数使用详解
Jul 28 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
python实现微信远程控制电脑
Feb 22 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
python hough变换检测直线的实现方法
Jul 12 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
Python实现子类调用父类的初始化实例
Mar 12 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中使用Oracle数据库(6)
2006/10/09 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
python中map、any、all函数用法分析
2015/04/21 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python3开发环境搭建详细教程
2020/06/18 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
营销与策划专业毕业生求职信
2013/11/01 职场文书
企业消防安全制度
2014/02/02 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
单位承诺书格式
2014/05/21 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
少先队活动总结
2014/08/29 职场文书
借条如何写
2015/05/26 职场文书