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实现蓝桥杯VIP算法训练 小生物的逃逸

    试题 算法训练 小生物的逃逸 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 空间中有n个球,这些球不相交也不相切.有m个可以视为质点的小生物,可能在某些球内,也可能在所有球之外,但 ...

  2. Java实现 LeetCode 24 两两交换链表中的节点

    24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...

  3. 第七届蓝桥杯JavaB组国(决)赛部分真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.愤怒小鸟 题目描述 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和B) 以时速 10米 ...

  4. Java实现堆排序问题(变治法)

    问题描述 用基于变治法的堆排序算法对任意一组给定的数据进行排序 2.1 堆排序原理简介 堆可以定义为一颗二叉树,树的节点中包含键(每个节点是一个键),并且满足下面两个条件: (1)树的形状要求--这颗 ...

  5. Java实现 蓝桥杯 历届试题 地宫取宝

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  6. POJ 2810:完美立方

    原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 形如\(a^{2}\)= \(b^{2}\) + \(c^{2}\) + \(d^{2}\)的等式被称为完美立方等式.例如123 ...

  7. 使用WPF实现的 喜马拉雅FM 资源下载工具

    因为喜马拉雅pc网站上没有提供下载功能,之前有个同事问我有没有办法将资源下载到本地,当然通过浏览器F12也能找到下载地址,但挺麻烦.正好最近想学wpf,周末在家也没事,于是对着百度撸了下代码.当然只能 ...

  8. 4.vue class 绑定- model基础应用

        //代码可以复制自行体验   <template>     <div id="app" @click.stop="test('你点击了我big- ...

  9. win32 socket http 操作

    纯wininet 操作http关键代码如下: HINTERNET hNet = ::InternetOpen(_T("Test"), INTERNET_OPEN_TYPE_DIRE ...

  10. 关于宝塔面板ftp+sublime

    如果sublime通过ftp上传文件传不上去,我的问题在于应该把sftp-config.json中"remote_path": "/",设置成这样.一下午.哎呀 ...