机器学习第五发:BS教你如何解析网页,规整数据?
ztj100 2025-05-26 20:20 13 浏览 0 评论
现在越来越多的应用和互联网产品做内容的聚合,像今日头条、等等,太多的聚合应用以及不胜枚举,甚至浏览器也可以嵌入聚合的应用。
互联网上拥有太多太多的数据,抓取网页的数据做数据挖掘也是最廉价的获取数据的途径,解析数据是得到规则数据的方法,他为后面数据挖掘、机器学习模型的学习提供支持。
在获取互联网数据的过程中,不可避免的就要使用到网页爬虫技术,此外在抓取下来的网页,需要进一步的解析出自己想要的内容。正则表达式是最常用的解析工具,针对网页目前有个非常便捷的框架,叫做BeautifulSoup。本文使用的是BeautifulSoup 3,现在已经有BeautifulSoup4了,名字改为bs4
(1)下载与安装
# BeautifulSoup 的下载与安装
pip install BeautifulSoup
另外也可以下载安装包进行安装
(2)快速开始
# BeautifulSoup 快速开始
html_doc = urllib2.urlopen('http://baike.baidu.com/view/1059363.htm')
soup = BeautifulSoup(html_doc)
print soup.title
结果:
# BeautifulSoup 结果
<title>前门大街_百度百科</title>
(3)BeautifulSoup对象介绍
BeautifulSoup中主要包含三种类型的对象:
BeautifulSoup.BeautifulSoup
BeautifulSoup.Tag
BeautifulSoup.NavigableString
通过下面例子来认识上面的三种数据类型:
# BeautifulSoup 示例
from BeautifulSoup import BeautifulSoup
import urllib2
html_doc = urllib2.urlopen('http://www.baidu.com')
soup = BeautifulSoup(html_doc)
print type(soup)
print type(soup.title)
print type(soup.title.string)
print soup.title
print soup.title.string
结果为
# BeautifulSoup 示例结果
<class 'BeautifulSoup.BeautifulSoup'>
<class 'BeautifulSoup.Tag'>
<class 'BeautifulSoup.NavigableString'>
<title>百度一下,你就知道</title>
百度一下,你就知道
print soup.title
print soup.title.string
从上面的例子可以比较清晰的看到BeautifulSoup主要包括三种类型的对象。
BeautifulSoup.BeautifulSoup //BeautifulSoup对象
BeautifulSoup.Tag //标签对象
BeautifulSoup.NavigableString //导航string文本对象
(4)BeautifulSoup剖析树
1. BeautifulSoup.Tag对象方法
获取标记对象,通过点号获取Tag对象
# BeautifulSoup 示例
title = soup.title
print type(title.contents)
print title.contents
print title.contents[0]
# BeautifulSoup 示例结果
<type 'list'>
[u'\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053']
百度一下,你就知道
contents方法
获得当前标签的内容list,如果该标签没有子标签,那么string方法和contents[0]得到的内容是一样的。见上面示例
next,parent方法
获得当前的标签的子标签和父标签
# BeautifulSoup 示例
html = soup.html
print html.next
print ''
print html.next.next
print html.next.next.nextSibling
# BeautifulSoup 示例结果
<head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><meta http-equiv="X-UA-Compatible"content="IE=Edge" /><meta content="always" name="referrer" /><meta name="theme-color" content="#2932e1" /><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /><link rel="icon" sizes="any" mask="mask" href="
//www.baidu.com/img/baidu.svg" /><link rel="dns-prefetch" href="//s1.bdstatic.com" /><link rel="dns-prefetch" href="//t1.baidu.com" /><link rel="dns-prefetch" href="//t2.baidu.com" /><link rel="dns-prefetch" href="//t3.baidu.com" /><link rel="dns-prefetch" href="//t10.baidu.com" /><link rel="dns-prefetch" href="//t11.baidu.com" /><link rel="dns-prefetch" href="//t12.baidu.com" /><link rel="dns-prefetch" href="//b1.bdstatic.com" /><title>百度一下,你就知道</title>......
</head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
nextSibling,previousSibling
获得当前标签的下一个兄弟标签和前一个兄弟标签
对不同的网页,将你需要的标签中的数据,例如评论、阅读量、购买量、价格、数量等等,通过BS解析获得。解析是数据获取整理过程中不可少的一部分。
进一步的,借助机器学习模型对上述数据进行建模分析,得到一定的结论。
相关推荐
- 10分钟教你写一个数据库
-
今天教大家借助一款框架快速实现一个数据库,这个框架就是Calcite,下面会带大家通过两个例子快速教会大家怎么实现,一个是可以通过SQL语句的方式可以直接查询文件内容,第二个是模拟Mysql查...
- 2025 年每个 JavaScript 开发者都应该了解的功能
-
大家好,很高兴又见面了,我是"高级前端进阶...
- Spring Boot JDBC 与 JdbcTemplate 全面指南(万字保姆级教程)
-
一、SpringBootJDBC基础1.1JDBC简介与演进JDBC(JavaDatabaseConnectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序...
- 大数据Hadoop之——Flink Table API 和 SQL(单机Kafka)
-
一、TableAPI和FlinkSQL是什么TableAPI和SQL集成在同一套API中。这套API的...
- 一篇文章搞懂TypeScript
-
TypeScript是JavaScript的超集,一方面给动态类型的js增加了类型校验,另一方面扩展了js的各种功能。原始数据类型...
- 第一章、TS语言简介
-
TypeScript(简称TS)是微软公司开发的一种基于JavaScript(简称JS)语言的编程语言。它的目的并不是创造一种全新语言,而是增强JavaScript的功能,使其更适合多人合...
- 这里有你想知道的ES2020中Javascript10个新特性
-
ES2020中Javascript10个新特性1、BigIntBigInt,Javascript中最期待的新功能终于落地。它允许开发者在JS中使用更大的整数进行数据处理。之前,Javascrip...
- MySQL学到什么程度?才有可以在简历上写精通
-
前言如今互联网行业用的最多就是MySQL,然而对于高级Web面试者,尤其对于寻找30k下工作的求职者,很多MySQL相关知识点基本都会涉及,如果面试中,你的相关知识答的模糊和不切要点,基...
- TS类型体操,看懂你就能玩转TS了
-
本文以Typescript4.5及以上版本为基础,于2022年02月07日在掘金首发本文要实现一种类型工具...
- 快速了解JavaScript的基础知识
-
注释单行注释://单行注释多行注释:...
- JS中的数据类型
-
在JavaScript开发中,理解数据类型是基础且关键的一步。无论是日常编码还是面试场景,数据类型的细节都可能成为解决问题的关键。一、简单值和复杂值...
- 抽空三分钟,读懂 Object 、 object 和 「 」 三者之间区别
-
typeScript中引入了object类型,用于表示非原始类型。在JS中被叫做原始类型的有:number、string、boolean、bigint、symbol、null和undef...
- 采用 Spring Boot + MyBatis搭建的绝美博客系统源码免费分享
-
SpringBoot相对于传统的SSM框架的优点是提供了默认的样板化配置,简化了Spring应用的初始搭建过程,如果你不想被众多的xml配置文件困扰,可以考虑使用SpringBoot替代,今天小...
- 小记·Mybatis如何引用其他XML中的SQL片段
-
实际开发中你可能遇到一个问题,比如这个resultMap或者这个<sql>片段已经在...
- 基于SpringMVC + MyBatis实现的小说系统源码免费分享
-
一款基于SpringMVC+MyBatis实现的小说系统,目前只有wap端。前端采用vue的框架cube-ui,采用前后端分离的结构,系统中针对数据接口安全做了一定的限制,很大程度上保证了...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)