数据解析_bs进行数据解析
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进行数据解析的更多相关文章
- 解析json格式数据
实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...
- js读取解析JSON类型数据(转)
谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...
- NSXMLParser解析本地.xml数据(由于like7xiaoben写的太好了,我从她那里粘贴过来的)
NSXMLParser解析简要说明 .是sax方法解析 .需要创建NSXMLParser实例 (alloc) 并创建解析器 (initWithData:) 为解析器定义委托 (setDelegate: ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- [Android]天气App 3 网络数据的请求和Json解析
Android客户端开发,不仅仅是在Android端开发,还需要有相应的后台服务支持,否则的话,客户端的数据就只能放到本地自己做处理.我认为的原生态的App就是对应服务端的Client.他能像浏览 ...
- 实现android上解析Json格式数据功能
实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...
- Windowsphone 之xml序列化和反序列化的应用(WebService解析返回的数据DataSet )
关于Xml的序列化和反序列化: 可以看这篇文章,http://www.cnblogs.com/Windows-phone/p/3243575.html WebService解析返回的数据DataSet ...
- Gson解析json繁杂数据
碰到json数据.里面格式众多.list+string[]+等等.具体json参数如下: eg:以下为接口参数: "responseData":{ "brandCode& ...
- Android 通过Dom, Sax, Pull解析网络xml数据
这篇文章不是完全原创,XML解析的部分参考了 liuhe688 的文章.文章地址:http://blog.csdn.net/liuhe688/article/details/6415593 这是一个几 ...
随机推荐
- Java实现 洛谷 P1149 火柴棒等式
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...
- java实现洛谷P3376【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数u ...
- java实现Playfair 密码
一种 Playfair 密码变种加密方法如下:首先选择一个密钥单词(称为 pair)(字母不重复,且都为小写字母), 然后与字母表中其他字母一起填入至一个 5x5 的方阵中,填入方法如下: 1.首先按 ...
- portapack发射GPS的信号实现GPS脱机模拟器
要注意portapack必须要购买带高精度晶振的版本,另外固件要刷gridRF版本,用官方的或者havoc的都不行. 固件在这下载: 链接: https://pan.baidu.com/s/16flB ...
- 聊一聊高并发高可用那些事 - Kafka篇
目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...
- Windows下C,C++开发环境搭建指南
Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ...
- windows server2012 安装SQL SERVER 2016环境监测出错
Windows Server 2012 R2 安装SQL Server 2016 顺序为:KB2919442 ——> KB2919355 ——> SQL Server 2016 并且还要安 ...
- Git创建多个ssh key
在使用git的时候,遇到需要创建多个ssh key的需求,一个用来git hub项目,一个用来git lab项目: 之前如果已将创建过一个ssh key,那么在创建第二个的时候,要修改默认名称,然后增 ...
- WPF入门(1)
开始对WPF动手,从0开始一步一步深入学习 1)参考文档:msdn.<WPF编程宝典:使用C#2012和NET 4.5 第4版> 2)开发工具:Microsoft Visual Studi ...
- Java 多线程基础(九)join() 方法
Java 多线程基础(九)join 方法 一.join() 方法介绍 join() 定义 Thread 类中的,作用是:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.如:线 ...