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文件右键找不到IDLE打开项解决办法
Jun 08 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
python 切换root 执行命令的方法
Jan 19 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
python 将有序数组转换为二叉树的方法
Mar 26 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
Python&Matlab实现樱花的绘制
Apr 07 Python
python获取带有返回值的多线程
May 02 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中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
vue-router传参用法详解
2019/01/19 Javascript
python封装对象实现时间效果
2020/04/23 Python
Python中实现三目运算的方法
2015/06/21 Python
用Python写冒泡排序代码
2016/04/12 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
职业生涯规划设计步骤
2014/01/12 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
成人继续教育实施方案
2014/03/01 职场文书
八项规定对照检查材料
2014/08/31 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
linux中nohup和后台运行进程查看及终止
2021/06/24 Python