数据解析_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实现 蓝桥杯VIP 算法训练 入学考试
问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...
- Java实现 LeetCode 160 相交链表
160. 相交链表 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4, ...
- Java实现 洛谷 P2089 烤鸡
import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.Sc ...
- java实现第四届蓝桥杯组素数
组素数 题目描述 素数就是不能再进行等分的数.比如:2 3 5 7 11 等. 9 = 3 * 3 说明它可以3等分,因而不是素数. 我们国家在1949年建国.如果只给你 1 9 4 9 这4个数字卡 ...
- MyBatis整合双数据源
有时候在项目中会遇到需要连接两个数据库的情况.本文就结合Spring和Mybatis来讲下怎么使用双数据源(或者是多数据源). 背景知识介绍 本文中实现多数据源的关键是Spring提供的Abstrac ...
- 【JAVA习题十九】利用递归方法求5!。
package erase; public class 用递归法求5的阶乘 { public static void main(String[] args) { // TODO Auto-genera ...
- sort运用
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; struc ...
- 用Java模拟游戏重力的实现(弹跳)
年末开了Java实训大作业 想了好几天决定选择马里奥小游戏 发现即使做出来但是跳跃功能是很“笨拙”的,和我们玩的游戏不一样,没有跳跃速度的快慢什么的,后来才知道这个叫做游戏里面重力的模拟. 组队做系统 ...
- 组态与非组态结合的LT
概述 最新的应用软件快速搭建平台现已投入使用.首先对名称进行规范统一一下. 英文全称:LARKIN-CN.TOP : 中文全称:拉图: 简称:LT. 特点: 组态软件开发的快速.灵活 C端软件的控件交 ...
- hadoop知识整理(3)之MapReduce之代码编写
前面2篇文章知道了HDFS的存储原理,知道了上传和下载文件的过程,同样也知晓了MR任务的执行过程,以及部分代码也已经看到,那么下一步就是程序员最关注的关于MR的业务代码(这里不说太简单的): 一.关于 ...