1、bs4进行数据解析

  数据解析的原理

     1、标签定位

     2、提取标签,标签属性中存储的数据值

bs4数据解析的原理

    1、实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

2、通过调用BeautifulSoup对象中相关的属性或者方法进行标签的定位和数据的提取

2、环境安装

  -- pip install  bs4

-- pip install  lxml

3、基本知识

  1、实例化BeautifulSoup对象:

    from bs4 import BeautifulSoup

    实例化:1、将本地的html文档中的数据加载到该对象中       

 fp = open('./test.html','r',encoding='utf-8')
#将本地的html文档中的数据加载到改对象中
soup = BeautifulSoup(fp,"lxml")
print(soup)

        2、将互联网上获取的页面源码加载到改对象中(常用)

page_text = response.text
soup = BeautifulSoup(page_text,'lxml')

2、Beautiful提供的属性和方法

1、soup.tagName   例如:soup.a   就是获取第一个a标签

   2、find()

soup.find('tagName')    如 soup.find('div')      返回的也是第一个div,和前面是等价的

            soup.find('div',class_/id/attr='song')

soup.find_all()   返回多个数据  find_all('tagName') 返回的是一个列表

3、select()  最好用

           select('某种选择器')  可以是id、类、标签选择器  返回一个列表  soup.select('.tang')

      soup.select('.tang >ul >li > a')[0]

      soup.select('.tang >ul >li  a')[0]

4、获取标签之间的文本数据    soup.a.text   soup.a.string    soup.a.get_text()

    区别:text/get_text()   可以获取标签之间的所有文本内容,可以是后代

          string只可以获取标签的子元素内容

5、获取标签的属性值

        soup.a['href']

4、实战

from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
#爬取三国演义小说的所有章节和内容
url = "http://www.shicimingju.com/book/sanguoyanyi.html"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
}
# 1、对首页的数据进行爬取
page_text = requests.get(url = url,headers=headers).text
# 2、在首页中解析出章节的标题和详情页的url
#1、实例化beautifulSoup对象 soup = BeautifulSoup(page_text,'lxml')
#2、解析章节标题
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,'爬取成功')

数据解析_bs进行数据解析的更多相关文章

  1. 解析json格式数据

    实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...

  2. js读取解析JSON类型数据(转)

    谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...

  3. NSXMLParser解析本地.xml数据(由于like7xiaoben写的太好了,我从她那里粘贴过来的)

    NSXMLParser解析简要说明 .是sax方法解析 .需要创建NSXMLParser实例 (alloc) 并创建解析器 (initWithData:) 为解析器定义委托 (setDelegate: ...

  4. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. [Android]天气App 3 网络数据的请求和Json解析

      Android客户端开发,不仅仅是在Android端开发,还需要有相应的后台服务支持,否则的话,客户端的数据就只能放到本地自己做处理.我认为的原生态的App就是对应服务端的Client.他能像浏览 ...

  6. 实现android上解析Json格式数据功能

    实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...

  7. Windowsphone 之xml序列化和反序列化的应用(WebService解析返回的数据DataSet )

    关于Xml的序列化和反序列化: 可以看这篇文章,http://www.cnblogs.com/Windows-phone/p/3243575.html WebService解析返回的数据DataSet ...

  8. Gson解析json繁杂数据

    碰到json数据.里面格式众多.list+string[]+等等.具体json参数如下: eg:以下为接口参数: "responseData":{ "brandCode& ...

  9. Android 通过Dom, Sax, Pull解析网络xml数据

    这篇文章不是完全原创,XML解析的部分参考了 liuhe688 的文章.文章地址:http://blog.csdn.net/liuhe688/article/details/6415593 这是一个几 ...

随机推荐

  1. Java实现 洛谷 P1149 火柴棒等式

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...

  2. java实现洛谷P3376【模板】网络最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数u ...

  3. java实现Playfair 密码

    一种 Playfair 密码变种加密方法如下:首先选择一个密钥单词(称为 pair)(字母不重复,且都为小写字母), 然后与字母表中其他字母一起填入至一个 5x5 的方阵中,填入方法如下: 1.首先按 ...

  4. portapack发射GPS的信号实现GPS脱机模拟器

    要注意portapack必须要购买带高精度晶振的版本,另外固件要刷gridRF版本,用官方的或者havoc的都不行. 固件在这下载: 链接: https://pan.baidu.com/s/16flB ...

  5. 聊一聊高并发高可用那些事 - Kafka篇

    目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...

  6. Windows下C,C++开发环境搭建指南

    Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ...

  7. windows server2012 安装SQL SERVER 2016环境监测出错

    Windows Server 2012 R2 安装SQL Server 2016 顺序为:KB2919442 ——> KB2919355 ——> SQL Server 2016 并且还要安 ...

  8. Git创建多个ssh key

    在使用git的时候,遇到需要创建多个ssh key的需求,一个用来git hub项目,一个用来git lab项目: 之前如果已将创建过一个ssh key,那么在创建第二个的时候,要修改默认名称,然后增 ...

  9. WPF入门(1)

    开始对WPF动手,从0开始一步一步深入学习 1)参考文档:msdn.<WPF编程宝典:使用C#2012和NET 4.5 第4版> 2)开发工具:Microsoft Visual Studi ...

  10. Java 多线程基础(九)join() 方法

    Java 多线程基础(九)join 方法 一.join() 方法介绍 join() 定义 Thread 类中的,作用是:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.如:线 ...