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执行shell获取硬件参数写入mysql的方法
Dec 29 Python
python通过加号运算符操作列表的方法
Jul 28 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
Jun 29 Python
python逆序打印各位数字的方法
Jun 25 Python
python实现多张图片拼接成大图
Jan 15 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
Python中私有属性的定义方式
Mar 05 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
Python性能优化技巧
2015/03/09 Python
python中threading超线程用法实例分析
2015/05/16 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
《特殊的葬礼》教学反思
2014/04/27 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python