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实现批量重命名文件的代码
May 25 Python
python实现的简单猜数字游戏
Apr 04 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
python3编码问题汇总
Sep 06 Python
聊聊Python中的pypy
Jan 12 Python
python对html过滤处理的方法
Oct 21 Python
Python之pymysql的使用小结
Jul 01 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
python接口测试返回数据为字典取值方式
Feb 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多文件上传实现代码
2014/02/20 PHP
php构造函数的继承方法
2015/02/09 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
django 消息框架 message使用详解
2019/07/22 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Python双链表原理与实现方法详解
2020/02/22 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
公司授权委托书范本
2014/04/03 职场文书
啤酒节策划方案
2014/05/28 职场文书
员工团队活动方案
2014/08/28 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL