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命令行参数解析OptionParser类用法实例
Oct 09 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
Django框架实现逆向解析url的方法
Jul 04 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
Python 合并拼接字符串的方法
Jul 28 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
Python Selenium异常处理的实例分析
Feb 28 Python
用python自动生成日历
Apr 24 Python
一劳永逸彻底解决pip install慢的办法
May 24 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
PHP中其实也可以用方法链
2011/11/10 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
Python实现TCP通信的示例代码
2019/09/09 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
用Python写一个for循环的例子
2016/07/19 面试题
外语系毕业生自荐信范文
2013/12/16 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
5s推行计划书
2014/05/06 职场文书
项目建议书模板
2014/05/12 职场文书
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL