Python【BeautifulSoup解析和提取网页数据】
【解析数据】
使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子
在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据
【提取数据】是指把我们需要的数据从众多数据中挑选出来
点击右键-显示网页源代码,在这个页面里去搜索会更加准确
安装
pip install BeautifulSoup4(Mac电脑需要输入pip3 install BeautifulSoup4)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
解析数据

在括号中,输入两个参数,
第0个参数,必须是字符串类型;
第1个参数是解析器 这里使用用的是一个Python内置库:html.parser
import requests from bs4 import BeautifulSoup
#引入BS库 res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html') html = res.text soup = BeautifulSoup(html,'html.parser') #把网页解析为BeautifulSoup对象 print(type(soup)) #查看soup的类型 soup的数据类型是 <class 'bs4.BeautifulSoup'> soup是一个BeautifulSoup对象。 print(soup)
# 打印soup
response.text和soup 打印出的内容一模一样
它们属于不同的类:<class 'str'> 与<class 'bs4.BeautifulSoup'> 前者是字符串,后者是已经被解析过的BeautifulSoup对象
打印出来一样的原因:BeautifulSoup对象在直接打印的时候会调用对象内的str方法,所以直接打印 bs 对象显示字符串是str的返回结果
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
提取数据

find()与find_all()
是BeautifulSoup对象的两个方法
可以匹配html的标签和属性用法一样
区别
find()只提取首个满足要求的数据
find_all()提取出的是所有满足要求的数据
import requests
from bs4 import BeautifulSoup
url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/spder-men0.0.html'
res = requests.get (url)
print(res.status_code)
soup = BeautifulSoup(res.text,'html.parser')
item = soup.find('div') #使用find()方法提取首个<div>元素,并放到变量item里。
print(type(item)) #打印item的数据类型
print(item) #打印item
200
<class 'bs4.element.Tag'> #是一个Tag类对象
<div>大家好,我是一个块</div>
items = soup.find_all('div') #用find_all()把所有符合要求的数据提取出来,并放在变量items里
print(type(items)) #打印items的数据类型
print(items) #打印items
200
<class 'bs4.element.ResultSet'> #是一个ResultSet类的对象
[<div>大家好,我是一个块</div>, <div>我也是一个块</div>, <div>我还是一个块</div>]
#列表结构,其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理
soup.find('div',class_='books')
class_ 和python语法中的类 class区分,避免程序冲突
还可以使用其它属性,比如style属性等
括号中的参数:标签和属性可以任选其一,也可以两个一起使用,这取决于我们要在网页中提取的内容
import requests # 调用requests库
from bs4 import BeautifulSoup # 调用BeautifulSoup库
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')# 返回一个Response对象,赋值给res
html= res.text# 把Response对象的内容以字符串的形式返回
soup = BeautifulSoup( html,'html.parser') # 把网页解析为BeautifulSoup对象
items = soup.find_all(class_='books') # 通过定位标签和属性提取我们想要的数据
print(type(items)) #打印items的数据类型 #items数据类型是<class 'bs4.element.ResultSet>, 前面说过可以把它当做列表list
#for循环遍历列表
for item in items:
print('想找的数据都包含在这里了:\n',item) # 打印item
print(type(item)) #<class 'bs4.element.Tag'> 是Tag对象
#####################################################################
Tag对象
find()和find_all()打印出来的东西还不是目标数据,里面含着HTML标签
xxxxx
items = soup.find_all(class_='books') # 通过定位标签和属性提取我们想要的数据
for item in items:
print(type(item))
数据类型是<class 'bs4.element.Tag'>,是Tag对象
此时,需要用到Tag对象的三种常用属性与方法
此外,提取Tag对象中的文本,用到Tag对象的另外两种属性——Tag.text,和Tag['属性名']

import requests # 调用requests库
from bs4 import BeautifulSoup # 调用BeautifulSoup库
res =requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
# 返回一个response对象,赋值给res
html=res.text
# 把res解析为字符串
soup = BeautifulSoup( html,'html.parser')
# 把网页解析为BeautifulSoup对象
items = soup.find_all(class_='books') # 通过匹配属性class='books'提取出我们想要的元素
for item in items: # 遍历列表items
kind = item.find('h2') # 在列表中的每个元素里,匹配标签<h2>提取出数据
title = item.find(class_='title') # 在列表中的每个元素里,匹配属性class_='title'提取出数据
brief = item.find(class_='info') # 在列表中的每个元素里,匹配属性class_='info'提取出数据
print(kind.text,'\n',title.text,'\n',title['href'],'\n',brief.text) # 打印书籍的类型、名字、链接和简介的文字
##################################################################
对象的变化过程
开始用requests库获取数据,
到用BeautifulSoup库来解析数据,
再继续用BeautifulSoup库提取数据,
不断经历的是我们操作对象的类型转换。
################################################################
提取扩展
嵌套提取好几层:
find('ul',class_='nav').find('ul').find_all('li')
#提取个人理解:
每一个find的属性或者标签都是对应的层


Python【BeautifulSoup解析和提取网页数据】的更多相关文章
- 吴裕雄--天生自然PYTHON爬虫:使用BeautifulSoup解析中国旅游网页数据
import requests from bs4 import BeautifulSoup url = "http://www.cntour.cn/" strhtml = requ ...
- python爬虫-提取网页数据的三种武器
常用的提取网页数据的工具有三种xpath.css选择器.正则表达式 1.xpath 1.1在python中使用xpath必须要下载lxml模块: lxml官方文档 :https://lxml.de/i ...
- 接着上次的python爬虫,今天进阶一哈,局部解析爬取网页数据
*解析网页数据的仓库 用Beatifulsoup基于lxml包lxml包基于html和xml的标记语言的解析包.可以去解析网页的内容,把我们想要的提取出来. 第一步.导入两个包,项目中必须包含beau ...
- Python使用xslt提取网页数据
1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第一部分,实验 ...
- 怎么用Python写爬虫抓取网页数据
机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...
- 03:requests与BeautifulSoup结合爬取网页数据应用
1.1 爬虫相关模块命令回顾 1.requests模块 1. pip install requests 2. response = requests.get('http://www.baidu.com ...
- 解析获得的网页数据(XML文件或JSON文件)
1.解析XML:使用Pull方式. 需要导入jar包:xmlpull-xpp3-1.1.4c.jar //Pull解析XML文件 private void parseXMLWithPull(Strin ...
- python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】
前言:数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matla ...
- python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析
本章学习内容:将网站上的小说都爬下来,存储到本地. 目标网站:www.cuiweijuxs.com 分析页面,发现一共4步:从主页进入分版打开分页列表.打开分页下所有链接.打开作品页面.打开单章内容. ...
随机推荐
- 说自己熟悉 Spring Cloud 这些面试题你会吗
问题一:什么是Spring Cloud? Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成.Spring cloud Task,一个 ...
- WebRTC MediaStream接口
MediaStream API旨在方便地从用户本地摄像机和麦克风访问媒体流.getUserMedia()方法是访问本机输入设备的主要方式. API有几个关键点: 1. 实时视频或音频以流对象的形式表示 ...
- GitLab安装及备份迁移数据
centos7安装GitLab 下载相应版本rpm包 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 我此处下载9.3.6版本. # w ...
- Homebrew 使用国内镜像
在国内的网络环境下使用 Homebrew 安装软件的过程中,可能会长时间卡在 Updating Homebrew ... 方法一:按command + c 取消本次更新操作,直接安装软件 方法二:设置 ...
- JDBC的概述和简单使用
1. 概念 JDBC是 Java DataBase Connectivity 的简写,翻译过来就是 Java 操作数据库. 目的是使用统一的Java代码操作所有关系型数据库. JDBC实际是定义了一套 ...
- 20175313 张黎仙《Java综合讲座》第十三周课堂测试总结
目录 一.JAVA中两大类型 二.基本类型与类类型的相互转化 三.int与Integer之间的区别 四.String.StringBuffer.StringBuilder三者之间的区别 五.Array ...
- 2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础
博客目录 一.实践内容 跨站脚本攻击XSS 跨站请求伪造CSRF SQL注入攻击 二.实验中遇到的问题及解决 三.基础问题回答 四.实验总结 一.实践内容 本实践的目标理解常用网络攻击技术的基本原理. ...
- 三种Timer使用
System.Windows.Forms.Timer, System.Threading.Timer, System.Timer,三种Timer使用如下 第一种:System.Windows.Fo ...
- 微信小程序 scroll-view 填满剩余可用高度
根据微信小程序 scroll-view 文档所述,scroll-view必须给定一个固定高度.那么如果我们想要让它自动填充剩余高度,该怎么办呢? 前言 在说出我的解决方案之前,先来看一下我的页面设计, ...
- 记一次用WireShark抓包摆脱Si服后台限制的过程
背景:闲着无聊找了个小众的手游,因为手游都是比较吃金的,所以就找了个Si服,鉴于小时候宝可梦的情怀,就TB买了个GM后台.谁知这玩意有限制,到了100级之后升级超级难,最多只能发送99999W点经验, ...