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爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
opencv 阈值分割的具体使用
Jul 08 Python
pycharm 的Structure界面设置操作
Feb 05 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 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版网站缓存加快打开速度的方法分享
2012/06/03 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
angular.bind使用心得
2015/10/26 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
python通过smpt发送邮件的方法
2015/04/30 Python
Django发送html邮件的方法
2015/05/26 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
详解python3中的真值测试
2018/08/13 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python实现猜拳小游戏
2020/04/05 Python
python初步实现word2vec操作
2020/06/09 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
医院辞职信范文
2014/01/17 职场文书
生日主持词
2014/03/20 职场文书
3的组成教学反思
2014/04/30 职场文书
大班亲子运动会方案
2014/06/10 职场文书
艾滋病宣传标语
2014/06/25 职场文书
信用卡工资证明范本
2014/10/17 职场文书
2014年维修工作总结
2014/11/22 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL