【解析数据】

使用浏览器上网,浏览器会把服务器返回来的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解析和提取网页数据】的更多相关文章

  1. 吴裕雄--天生自然PYTHON爬虫:使用BeautifulSoup解析中国旅游网页数据

    import requests from bs4 import BeautifulSoup url = "http://www.cntour.cn/" strhtml = requ ...

  2. python爬虫-提取网页数据的三种武器

    常用的提取网页数据的工具有三种xpath.css选择器.正则表达式 1.xpath 1.1在python中使用xpath必须要下载lxml模块: lxml官方文档 :https://lxml.de/i ...

  3. 接着上次的python爬虫,今天进阶一哈,局部解析爬取网页数据

    *解析网页数据的仓库 用Beatifulsoup基于lxml包lxml包基于html和xml的标记语言的解析包.可以去解析网页的内容,把我们想要的提取出来. 第一步.导入两个包,项目中必须包含beau ...

  4. Python使用xslt提取网页数据

    1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第一部分,实验 ...

  5. 怎么用Python写爬虫抓取网页数据

    机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...

  6. 03:requests与BeautifulSoup结合爬取网页数据应用

    1.1 爬虫相关模块命令回顾 1.requests模块 1. pip install requests 2. response = requests.get('http://www.baidu.com ...

  7. 解析获得的网页数据(XML文件或JSON文件)

    1.解析XML:使用Pull方式. 需要导入jar包:xmlpull-xpp3-1.1.4c.jar //Pull解析XML文件 private void parseXMLWithPull(Strin ...

  8. python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】

    前言:数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matla ...

  9. python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析

    本章学习内容:将网站上的小说都爬下来,存储到本地. 目标网站:www.cuiweijuxs.com 分析页面,发现一共4步:从主页进入分版打开分页列表.打开分页下所有链接.打开作品页面.打开单章内容. ...

随机推荐

  1. Spring - 环境安装

    安装IDEA的非Community版本和Java的包之后就可以用Java来HelloWorld了. 然后去这个链接:https://github.com/spring-guides/gs-rest-s ...

  2. ElasticSearch java客户端更新时出现的错误:NoNodeAvailableException[None of the configured nodes are available

    下午尝试 用ElasticSearch  的java客户端去做数据检索工作,测试了一下批量更新,代码如下: public static void bulkUpdateGoods(List<Goo ...

  3. sqlserver数据库查询语句

    --数据库所有表select * from sysobjects where type='u'; --指定表的所有列select name from syscolumns where id=(sele ...

  4. idhttp访问DATASNAP有密码验证的中间件

    idhttp访问DATASNAP有密码验证的中间件 用TIDHttp访问DataSnap Rest服务器,在服务器采用了用户验证的情况下,客户端需要提交密码,否则不能正常连接. procedure T ...

  5. mac下如何安装python3?

    1. 安装homebrew $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...

  6. Bitmap之getDensity和setDensity函数

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  7. Keyframe类-动画中关键帧概念

    package com.loaderman.customviewdemo; import android.animation.Animator; import android.animation.Ke ...

  8. OS X环境下如何搭建编译Cocos2D-X v3.x的Android Studio工程

    Cocos2D-X官网已经简单介绍了如何在OS X环境下搭建Cocos2D-X v2.x和v3.x的指南.具体链接为:http://www.cocos.com/doc/article/index?ty ...

  9. 数据库连接池Flask-SQLAlchemy中多线程安全的问题

    使用flask-sqlalchemy写代码码到一半,突然想到,Session是否是线程安全的?于是上官方文档,答案是否! 那问题来了,怎么破?因为它会牵涉到多线程情况下,调用rollback导致的不可 ...

  10. OSG 遍历fbx节点

    count:560 construction_worker 4294967295 osg::MatrixTransform1 Bip001 L Finger02 4294967295 osg::Mat ...