数据解析_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 这是一个几 ...
随机推荐
- C#Winform中resx文件无效 找不到路径
问题由来 笔者因为更改了添加的图片的路径,再把路径改成图片所在的路径还是报resx文件无效,未能找到路径 问题原因 其实这个问题是因为对对象的引用修改了,但是resx文件中的应用还是没有修改.因为re ...
- Centos7 搭建KVM并创建Linux Windows虚拟机
一.安装KVM 查看系统版本 cat /etc/redhat-release 关闭防火墙及selinux systemctl disable firewalld.service 查看防 ...
- 第一章02-异常情况下Activity的生命周期
异常情况下的生命周期分析 1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建 比如,屏幕旋转,默认情况下Activity会被销毁并且重新创建,不过我们也可以阻止系统重新创建我们的Ac ...
- Kubernetes内部域名解析的那些事儿
前言 在kubernets环境中,服务发现大都是基于内部域名的方式.那么就涉及到内部域名的解析.从1.11版本开始,kubeadm已经使用第三方的CoreDNS替换官方的kubedns作为集群内部域名 ...
- 2.Go--hello world
编写一个hello world package main import ( "fmt" "time" ) func main(){ fmt.Println(&q ...
- [xDebug]Xdebug和Sublime调试PHP代码
安装xdebug 省略... 配置sublime 要调试某一个项目,首先得把这个项目在sublime下保存成一个project sublime->project->save project ...
- <VCC笔记> 溢出与unchecked
在程序运算或者数据转换的时候,由于各种数据类型有各自的范围,运算的时候,其结果如果超出这个范围,就被称之为溢出.熟悉C#的同志们应该了解用来解决溢出(Overflow)问题的checked,unche ...
- 从零开始的Spring Boot(3、Spring Boot静态资源和文件上传)
Spring Boot静态资源和文件上传 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式) https://www. ...
- LR脚本信息函数-lr_whoami
void lr_whoami(int * vuser_id,char ** sgroup,int * scid); 参数说明: vuser_id:指向用于存储Vuser ID号的输出参数的指针. sg ...
- 一个老牌程序员说:做Java开发,怎么可以不会这 20 种类库和 API