苏州企业网站建,为什么做的网站有的有弹窗有的没有,代理公司注册网站,263企业邮箱手机登录文章目录 前言BeautifulSoup是什么BeautifulSoup怎么用解析数据提取数据 对象的变化过程总结 前言
上一关#xff0c;我们学习了HTML基础知识#xff0c;知道了HTML是一种用来描述网页的语言#xff0c;又了解了HTML的基本结构。 认识了HTML中的常见标签和常见属性#x… 文章目录 前言BeautifulSoup是什么BeautifulSoup怎么用解析数据提取数据 对象的变化过程总结 前言
上一关我们学习了HTML基础知识知道了HTML是一种用来描述网页的语言又了解了HTML的基本结构。 认识了HTML中的常见标签和常见属性 根据这些知识我们成功修改了这个网页上原来所显示标题——“这个书苑不太冷”改成了“蜘蛛侠大战网页”。 最后还写了这样一段代码即通过调用requests库获取到了网页源代码并将它写入到本地
# 调用requests模块
import requests
# 获取网页源代码得到的res是response对象。
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 检测请求是否正确响应
print(res.status_code) # 新建一个名为book的html文档你看到这里的文件没加路径它会被保存在程序运行的当前目录下。
# 字符串需要以w读写。你在学习open()函数时接触过它。
file open(book.html,w)
# res.text是字符串格式把它写入文件内。
file.write(res.text)
# 关闭文件
file.close() 今天这一关如果用一句话来概括我们要学习的内容那就是“品尝”一道美味的“浓汤” —— BeautifulSoup模块。
BeautifulSoup到底在爬虫中发挥着怎样的作用能让我们单独拿出一个课程来学一起来看看。
BeautifulSoup是什么
我们得先来回忆一下爬虫的四个步骤 第0关的requests库帮我们搞定了爬虫第0步——获取数据第1关的HTML知识是进行爬虫必不可少的背景知识能辅助我们解析和提取数据。
接下来解析和提取的部分就交给灵活又方便的网页解析库BeautifulSoup。
那么本关学习目标学会使用BeautifulSoup解析和提取网页中的数据。 【解析数据】是什么意思呢
我们平时使用浏览器上网浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子之后我们才能在网页上做各种操作。
而在爬虫中也要使用能读懂html的工具才能提取到想要的数据。 这就是解析数据。
【提取数据】是指把我们需要的数据从众多数据中挑选出来。
我还想提醒一下解析与提取数据在爬虫中既是一个重点也是难点。因为这一关要讲两步信息量会比之前两关大所以希望你在学习的时候能做好一定的心理准备投入更多精力。
不过我对你有信心。O(∩_∩)O
那么接下来我们就来正式学习BeautifulSoup是如何解析和提取数据的吧~
BeautifulSoup怎么用
BeautifulSoup库目前已经进阶到第4版Beautiful Soup 4由于它不是Python标准库而是第三方库需要单独安装它不过我们的学习系统已经安装好了。
如果你是在自己的电脑上运行需要在终端输入一行代码运行pip install BeautifulSoup4。Mac电脑需要输入pip3 install BeautifulSoup4
安装好之后就可以使用了。
解析数据
BeautifulSoup解析数据的用法很简单请看下图 在括号中要输入两个参数第1个参数是要被解析的文本注意了它必须必须必须是字符串。
括号中的第2个参数用来标识解析器我们要用的是一个Python内置库html.parser。它不是唯一的解析器却是简单的那个
我们看看具体的用法。仍然以网站这个书苑不太冷为例urlhttps://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html假设我们想爬取网页中的书籍类型、书名、链接、和书籍介绍。
根据之前所学的requests.get()我们可以先获取到一个Response对象并确认自己获取成功
# 调用requests库
import requests
# 获取网页源代码得到的res是response对象
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 检查请求是否正确响应
print(res.status_code)
# 把res的内容以字符串的形式返回
html res.text
# 打印html
print(html)上面的代码是之前学过的内容好接下来就轮到BeautifulSoup登场解析数据了请特别留意第3行和第6行新增的代码。
import requests
# 引入BS库下面的bs4就是beautifulsoup4
from bs4 import BeautifulSoup
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 把网页解析为BeautifulSoup对象
soup BeautifulSoup(res.text,html.parser) 第3行是引入BeautifulSoup库。
第6行中的第0个参数必须是字符串类型括号中的第1个参数是解析器。
这就是解析数据的用法。
接下来我们来打印看看soup的数据类型和soup本身第5行开始为新增代码。
import requests
from bs4 import BeautifulSoup
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
soup BeautifulSoup( res.text,html.parser)
# 查看soup的类型
print(type(soup))
# 打印soup
print(soup) 运行结果
import requests
from bs4 import BeautifulSoup
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
soup BeautifulSoup( res.text,html.parser)
# 查看soup的类型
print(type(soup))
# 打印soup
print(soup) 看看运行结果soup的数据类型是class ‘bs4.BeautifulSoup’说明soup是一个BeautifulSoup对象。
下一行开始就是我们打印的soup它是我们所请求网页的完整HTML源代码。我们所要提取的书名、链接、书籍内容这些数据都在这里面。
可是疑点来了如果有非常细心的同学也许会发现打印soup出来的源代码和我们之前使用response.text打印出来的源代码是完全一样的。
也就是说我们好不容易用BeautifulSoup写了一些代码来解析数据但解析出的结果竟然和没解析之前一样。
你听我解释事情是这样的虽然response.text和soup打印出的内容表面上看长得一模一样却有着不同的内心它们属于不同的类class ‘str’ 与class ‘bs4.BeautifulSoup’。前者是字符串后者是已经被解析过的BeautifulSoup对象。之所以打印出来的是一样的文本是因为BeautifulSoup对象在直接打印它的时候会调用该对象内的str方法所以直接打印 bs 对象显示字符串是str的返回结果。
我们之后还会用BeautifulSoup库来提取数据如果这不是一个BeautifulSoup对象我们是没法调用相关的属性和方法的所以我们刚才写的代码是非常有用的并不是重复劳动。
到这里你就学会了使用BeautifulSoup去解析数据
from bs4 import BeautifulSoup
soup BeautifulSoup(字符串,html.parser) 完成了爬虫的第1步解析数据下面就是爬虫的第2步提取数据。
提取数据
我们仍然使用BeautifulSoup来提取数据。
这一步又可以分为两部分知识find()与find_all()以及Tag对象标签对象。 先看find()与find_all()。
find()与find_all()是BeautifulSoup对象的两个方法它们可以匹配html的标签和属性把BeautifulSoup对象里符合要求的数据都提取出来。
它俩的用法是一样的区别在于它们工作量。
find()只提取首个满足要求的数据。find()方法将代码从上往下找找到符合条件的第一个数据不管后面还有没有满足条件的其他数据停止寻找立即返回。
而find_all()顾名思义find all查找全部提取出的是所有满足要求的数据。代码从上往下找一直到代码的最后把所有符合条件的数据揣好一起打包返回。 看两个例子你就清楚了。以这个网页为例URL: https://localprod.pandateacher.com/python-manuscript/crawler-html/spder-men0.0.html 在网页的HTML代码中有三个div元素
用find()可以提取出首个元素(只有一个)而find_all()可以全部取出三个。 看代码第7行为新增代码然后尝试运行查看结果
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)
# 使用find()方法提取首个div元素并放到变量item里。
item soup.find(div)
# 打印item的数据类型
print(type(item))
# 打印item
print(item) 运行结果
200
class bs4.element.Tag
div大家好我是一个块/div看运行结果正是首个div元素吧我们还打印了它的数据类型class ‘bs4.element.Tag’说明这是一个Tag类标签对象。
再来试试find_all()吧它可以提取出网页中的全部div元素3个请看代码第7行为新增代码然后点击运行。
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)
# 用find_all()把所有符合要求的数据提取出来并放在变量items里
items soup.find_all(div)
# 打印items的数据类型
print(type(items))
# 打印items
print(items) 运行结果
200
class bs4.element.ResultSet
[div大家好我是一个块/div, div我也是一个块/div, div我还是一个块/div]运行结果是那三个div元素它们一起组成了一个列表结构。打印items的类型显示的是class ‘bs4.element.ResultSet’是一个ResultSet类的对象。其实是Tag对象以列表结构储存了起来可以把它当做列表来处理。
下面我想强调一下它们用法中的两个要点 首先请看举例中括号里的class_这里有一个下划线是为了和python语法中的类 class区分避免程序冲突。当然除了用class属性去匹配还可以使用其它属性比如style属性等。
其次括号中的参数标签和属性可以任选其一也可以两个一起使用这取决于我们要在网页中提取的内容。
如果只用其中一个参数就可以准确定位的话就只用一个参数检索。如果需要标签和属性同时满足的情况下才能准确定位到我们想找的内容那就两个参数一起使用。
再次总结一下find()与find_all()的用法 这么多的内容不太可能一下就记住要想熟练使用还需要大量练习。那么现在我们就来做个小练习吧仍然以网站这个书苑不太冷为例
urlhttps://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html目标是爬取网页中的三本书的书名、链接、和书籍介绍。
打开网址在网页上点击右键-检查查看源代码先看一看目标数据所对应的位置。 滑动一下网页看见我们想要的每一本书的数据分别存在了三个div元素中并且有相同的属性class“books”这个共同点就是我们去提取数据的关键。
我们可以先把这三个div元素提取出来然后再进一步提取那些具体的书的类型、书名等等。
由于我们要找的不是一本书的数据而是所有书的数据都要找所以这时应该用find_all()。
接下来要考虑的就是要用什么参数去查找和定位标签还是属性。此时可以用到开发者工具的搜索功能点击CtrlFMac电脑用commandF。
在搜索栏中输入div试试搜索结果是 一共找到了8个div元素但我们只想找到3个如果只用
来检索就会把其它不需要的信息也提取出来。那有没有什么别的识别这3个div元素的方法呢 有还记得我们上节课提到的class元素吗不同元素之间复用同一套样式只需要给标签设置同一个class值就好了。而这三个设计书籍信息的div样式很显然是一样的class值都为books。
我们用属性classbooks搜索看看果然整个HTML源代码中只有我们要找的三个元素的属性满足因此我们这次就可以只使用这个属性来提取。 注点击右键-显示网页源代码在这个页面里去搜索会更加准确在这里我们是点击右键-检查在这个页面里去搜索的
现在来看看代码怎么写再点击运行
# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个Response对象赋值给res
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 把Response对象的内容以字符串的形式返回
html res.text
# 把网页解析为BeautifulSoup对象
soup BeautifulSoup( html,html.parser)
# 通过匹配标签和属性提取我们想要的数据
items soup.find_all(class_books)
# 打印items
print(items)
# 打印items的数据类型
print(type(items)) 运行结果
[div classbooks
h2a nametype1科幻小说/a/h2
a classtitle hrefhttps://book.douban.com/subject/27077140/《奇点遗民》/a
p classinfo本书精选收录了刘宇昆的科幻佳作共22篇。《奇点遗民》融入了科幻艺术吸引人的几大元素数字化生命、影像化记忆、人工智能、外星访客……刘宇昆的独特之处在于他写的不是科幻探险或英雄奇幻而是数据时代里每个人的生活和情感变化。透过这本书我们看到的不仅是未来还有当下。/p
img classimg src./spider-men5.0_files/s29492583.jpg/
br
br
hr size1/
/br/br/div, div classbooks
h2a nametype2人文读物/a/h2
a classtitle hrefhttps://book.douban.com/subject/26943161/《未来简史》/a
p classinfo未来人类将面临着三大问题生物本身就是算法生命是不断处理数据的过程意识与智能的分离拥有大数据积累的外部环境将比我们自己更了解自己。如何看待这三大问题以及如何采取应对措施将直接影响着人类未来的发展。/p
img classimg src./spider-men5.0_files/s29287103.jpg/
br
br/
hr size1/
/br/div, div classbooks
h2a nametype3技术参考/a/h2
a classtitle hrefhttps://book.douban.com/subject/25779298/《利用Python进行数据分析》/a
p classinfo本书含有大量的实践案例你将学会如何利用各种Python库包括NumPy、pandas、matplotlib以及IPython等高效地解决各式各样的数据分析问题。由于作者Wes McKinney是pandas库的主要作者所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。/p
img classimg src./spider-men5.0_files/s27275372.jpg/
br/
br/
hr size1/
/div]
class bs4.element.ResultSet现在三本书的全部信息都被我们提取出来了。它的数据类型是class ‘bs4.element.ResultSet’ 前面说过可以把它当做列表list来看待。
不过列表并不是我们最终想要的东西我们想要的是列表中的值所以要想办法提取出列表中的每一个值。
用for循环遍历列表就可以把这三个div元素取出来了。
请仔细阅读代码然后点运行看看
# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个Response对象赋值给res
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 把Response对象的内容以字符串的形式返回
html res.text
# 把网页解析为BeautifulSoup对象
soup BeautifulSoup( html,html.parser)
# 通过定位标签和属性提取我们想要的数据
items soup.find_all(class_books)
for item in items:# 打印itemprint(想找的数据都包含在这里了\n,item) 运行结果
想找的数据都包含在这里了div classbooks
h2a nametype1科幻小说/a/h2
a classtitle hrefhttps://book.douban.com/subject/27077140/《奇点遗民》/a
p classinfo本书精选收录了刘宇昆的科幻佳作共22篇。《奇点遗民》融入了科幻艺术吸引人的几大元素数字化生命、影像化记忆、人工智能、外星访客……刘宇昆的独特之处在于他写的不是科幻探险或英雄奇幻而是数据时代里每个人的生活和情感变化。透过这本书我们看到的不仅是未来还有当下。/p
img classimg src./spider-men5.0_files/s29492583.jpg/
br
br
hr size1/
/br/br/div
想找的数据都包含在这里了div classbooks
h2a nametype2人文读物/a/h2
a classtitle hrefhttps://book.douban.com/subject/26943161/《未来简史》/a
p classinfo未来人类将面临着三大问题生物本身就是算法生命是不断处理数据ç过程意识与智能的分离拥有大数据积累的外部环境将比我们自己更了解自己。如何看待这三大问题以及如何采取应对措施将直接影响着人类未来的发展。/p
img classimg src./spider-men5.0_files/s29287103.jpg/
br
br/
hr size1/
/br/div
想找的数据都包含在这里了div classbooks
h2a nametype3技术参考/a/h2
a classtitle hrefhttps://book.douban.com/subject/25779298/《利用Python进行数据分析》/a
p classinfo本书含有大量的实践案例你将学会如何利用各种Python库包括NumPy、pandas、matplotlib以及IPython等高效地解决各式各样的数据分析问题。由于作者Wes McKinney是pandas库的主要作者所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。/p
img classimg src./spider-men5.0_files/s27275372.jpg/
br/
br/
hr size1/
/div程序运行很顺利结果正是那三个div元素。
其实到这里find()和find_all()的用法讲了练习也做了但是我们现在打印出来的东西还不是目标数据里面含着HTML标签所以下面我们要进入到提取数据中的另一个知识点——Tag对象。 咱们还以上面的代码为例我们现在拿到的是一个个包含html标签的数据还没达成目标。
这个时候我们一般会选择用type()函数查看一下数据类型因为Python是一门面向对象编程的语言只有知道是什么对象才能调用相关的对象属性和方法。
好来打印一下
# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个response对象赋值给res
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 把res的内容以字符串的形式返回
html res.text
# 把网页解析为BeautifulSoup对象
soup BeautifulSoup( html,html.parser)
# 通过定位标签和属性提取我们想要的数据
items soup.find_all(class_books)
for item in items:# 打印itemprint(想找的数据都包含在这里了\n,item) print(type(item))运行结果
想找的数据都包含在这里了div classbooks
h2a nametype1科幻小说/a/h2
a classtitle hrefhttps://book.douban.com/subject/27077140/《奇点遗民》/a
p classinfo本书精选收录了刘宇昆的科幻佳作共22篇。《奇点遗民》融入了科幻艺术吸引人的几大元素数字化生命、影像化记忆、人工智能、外星访客……刘宇昆的独特之处在于他写的不是科幻探险或英雄奇幻而是数据时代里每个人的生活和情感变化。透过这本书我们看到的不仅是未来还有当下。/p
img classimg src./spider-men5.0_files/s29492583.jpg/
br
br
hr size1/
/br/br/div
class bs4.element.Tag
想找的数据都包含在这里了div classbooks
h2a nametype2人文读物/a/h2
a classtitle hrefhttps://book.douban.com/subject/26943161/《未来简史》/a
p classinfo未来人类将面临着三大问题生物本身就是算法ç是不断处理数据的过程意识与智能的分离拥有大数据积累的外部环境将比我们自己更了解自己。如何看待这三大问题以及如何采取应对措施将直接影响着人类未来的发展。/p
img classimg src./spider-men5.0_files/s29287103.jpg/
br
br/
hr size1/
/br/div
class bs4.element.Tag
想找的数据都包含在这里了div classbooks
h2a nametype3技术参考/a/h2
a classtitle hrefhttps://book.douban.com/subject/25779298/《利用Python进行数据分析》/a
p classinfo本书含有大量的实践案例你将学会如何利用各种Python库包括NumPy、pandas、matplotlib以及IPython等高效地解决各式各样的数据分析问题。由于作者Wes McKinney是pandas库的主要作者所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。/p
img classimg src./spider-men5.0_files/s27275372.jpg/
br/
br/
hr size1/
/div
class bs4.element.Tag我们看到它们的数据类型是class ‘bs4.element.Tag’是Tag对象不知道你是否还记得这与find()提取出的数据类型是一样的。
好既然知道了是Tag对象下一步就是看看Tag类对象的常用属性和方法了。 上图是Tag对象的3种用法咱们一个一个来讲。
首先Tag对象可以使用find()与find_all()来继续检索。
回到我们刚刚写的代码即爬取这个书苑不太冷网站中每本书的类型、链接、标题和简介我们刚刚拿到的分别是三本书的内容即三个Tag对象。现在先把首个Tag对象展示在下面方便我们阅读
div classbooksh2a nametype1科幻小说/a/h2a hrefhttps://book.douban.com/subject/27077140/ classtitle《奇点遗民》/ap classinfo本书精选收录了刘宇昆的科幻佳作共22篇。《奇点遗民》融入了科幻艺术吸引人的几大元素数字化生命、影像化记忆、人工智能、外星访客……刘宇昆的独特之处在于他写的不是科幻探险或英雄奇幻而是数据时代里每个人的生活和情感变化。透过这本书我们看到的不仅是未来还有当下。/p img classimg src./spider-men5.0_files/s29492583.jpgbrbrhr size1
/div看第2行书籍的类型在这里面第3行我们要取的链接和书名在里面第4行书籍的简介在里面。因为是只取首个数据这次用find()就好。
先阅读下面的代码从11行开始为新增代码
# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个response对象赋值给res
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 把res的内容以字符串的形式返回
html res.text
# 把网页解析为BeautifulSoup对象
soup BeautifulSoup( html,html.parser)
# 通过定位标签和属性提取我们想要的数据
items soup.find_all(class_books)
for item in items:# 在列表中的每个元素里匹配标签h2提取出数据kind item.find(h2) # 在列表中的每个元素里匹配属性class_title提取出数据title item.find(class_title)# 在列表中的每个元素里匹配属性class_info提取出数据 brief item.find(class_info) # 打印提取出的数据print(kind,\n,title,\n,brief) # 打印提取出的数据类型print(type(kind),type(title),type(brief)) 接下来请你抄写上面的代码然后点击运行练习一下。 运行结果
h2a nametype1科幻小说/a/h2 a classtitle hrefhttps://book.douban.com/subject/27077140/《奇点遗民》/a p classinfo本书精选收录了刘宇昆的科幻佳作共22篇。《奇点遗民》融入了科幻艺术吸引人的几大元素数字化生命、影像化记忆、人工智能、外星访客……刘宇昆的独特之处在于他写的不是科幻探险或英雄奇幻而是数据时代里每个人的生活和情感变化。透过这本书我们看到的不仅是未来还有当下。/p
class bs4.element.Tag class bs4.element.Tag class bs4.element.Tag
h2a nametype2人文读物/a/h2 a classtitle hrefhttps://book.douban.com/subject/26943161/《未来简史》/a p classinfo未来人类将面临着三大问题生物本身就是算法生命是不断处理数据的过程意识与智能的分离拥有大数据积累的外部环境将比我们自己更了解自己。如何看待这三大问题以及å¦何采取应对措施将直接影响着人类未来的发展。/p
class bs4.element.Tag class bs4.element.Tag class bs4.element.Tag
h2a nametype3技术参考/a/h2 a classtitle hrefhttps://book.douban.com/subject/25779298/《利用Python进行数据分析》/a p classinfo本书含有大量的实践案例你将学会如何利用各种Python库包括NumPy、pandas、matplotlib以及IPython等高效地解决各式各样的数据分析问题。由于作者Wes McKinney是pandas库的主要作者所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。/p
class bs4.element.Tag class bs4.element.Tag class bs4.element.Tag除了我们拿到的数据之外运行结果的数据类型又是三个class ‘bs4.element.Tag’用find()提取出来的数据类型和刚才一样还是Tag对象。接下来要做的就是把Tag对象中的文本内容提出来。
这时可以用到Tag对象的另外两种属性——Tag.text获得标签中的值和Tag[‘属性名’]获得属性值。 我们用Tag.text提出Tag对象中的文字用Tag[‘href’]提取出URL。
只需要修改最后一行代码我们想要的数据就都能成功提取出来了
# 调用requests库
import requests
# 调用BeautifulSoup库
from bs4 import BeautifulSoup
# 返回一个response对象赋值给res
res requests.get(https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html)
# 把res解析为字符串
htmlres.text
# 把网页解析为BeautifulSoup对象
soup BeautifulSoup( html,html.parser)
# 通过匹配属性classbooks提取出我们想要的元素
items soup.find_all(class_books)
# 遍历列表items
for item in items: # 在列表中的每个元素里匹配标签h2提取出数据 kind item.find(h2) # 在列表中的每个元素里匹配属性class_title提取出数据 title item.find(class_title) # 在列表中的每个元素里匹配属性class_info提取出数据 brief item.find(class_info) # 打印书籍的类型、名字、链接和简介的文字print(kind.text,\n,title.text,\n,title[href],\n,brief.text) 看看终端拿出来啦(≧▽≦)/此处应该有掌声到这里我们终于成功解析、提取到了所有的数据。 运行结果
科幻小说 《奇点遗民》 https://book.douban.com/subject/27077140/ 本书精选收录了刘宇昆的科幻佳作共22篇。《奇点遗民》融入了科幻艺术吸引人的几大元素数字化生命、影像化记忆、人工智能、外星访客……刘宇昆的独特之处在于他写的不是科幻探险或英雄奇幻而是数据时代里每个人的生活和情感变化。透过这本书我们看到的不仅是未来还有当下。
人文读物 《未来简史》 https://book.douban.com/subject/26943161/ 未来人类将面临着三大问题生物本身就是算法生命是不断处理数据的过程意识与智能的分离拥有大数据积累的外部环境将比我们自己更了解自己。如何看待这三大问题以及如何采取应对措施将直接影响着人类未来的发展。
技术参考 《利用Python进行数据分析》 https://book.douban.com/subject/25779298/ 本书含有大量的实践案例你将学会如ä½利用各种Python库包括NumPy、pandas、matplotlib以及IPython等高效地解决各式各样的数据分析问题。由于作者Wes McKinney是pandas库的主要作者所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。这个层层检索的过程有点像是在超市买你想要的零食比如一包糖果和一包薯片首先要定位到超市的零食区然后去糖果区找糖果再去薯片区找薯片。 不过呢每个网页都有自己的结构我们写爬虫程序还是得坚持从实际出发具体问题具体分析哈。
我为你准备了一些习题记得要去完成它们你与爬虫大神的距离还要靠一个一个练习去缩短。
走到这里你已经学完了如何用BeautifulSoup库的相关知识来解析和提取数据。面对这扑面而来的新的知识我们有必要来梳理一下
对象的变化过程
其实说白了从最开始用requests库获取数据到用BeautifulSoup库来解析数据再继续用BeautifulSoup库提取数据不断经历的是我们操作对象的类型转换。
请看下图 上一关我们的操作对象从URL链接到了Response对象。而这一关我们的操作对象是这样的Response对象——字符串——BS对象。到这里又产生了两条分岔一条是BS对象——Tag对象另一条是BS对象——列表——Tag对象。
而操作对象的转变则是借由一些步骤完成的在图中是由阿拉伯数字标注的内容从Response对象到字符串是通过response.text完成的我就不赘述了图上标示得很清楚。
在此刻我尤其想要强调的是学到现在的你炒鸡棒的b(▽)d而你记不全这些内容太太太正常了因为编程从来都是一门强调实操实练的学科。
好现在想请屏幕前的你深吸一口气在椅子上一定坐稳了千万不要晕倒因为我对你隐瞒了一件事。
其实刚刚那个图还不完整完整版的图示是这样的 Python是一门面向对象编程的过程图中用英文字母的序号来展示的是每一种对象的方法和属性。比如bs对象的方法有find()和find_all()。我也不赘述了。
这个流程其实对应的是爬虫四步的前3步 这张图还挺重要的可以作为你做练习、复习的一个关键参考信息。❀
不过梳理完之后我们还是得来敲敲代码光看不练可不行。所以学完知识之后不只要去写作业最好把本关的的代码全部再写一次因为学习可是需要我们付出努力的噢。
总结
又到了一个关卡快要结束的时刻了。快速复习一下
我们今天学习了用bs库解析数据和提取数据。
解析数据的方法是用BeautifulSoup()。 提取数据的方法是用find()与find_all()。 这一关中除了学这些零碎的知识最重要的是我们要把所学的知识串成一条线 这就是本关的全部内容了。
最后我还想多说几句。在BeautifulSoup中不止find()和find_all()还有select()也可以达到相同目的。
其实在bs的官方文档中find()与find_all()的方法其实不止标签和属性两种还有这些 不过我们所教的这两种方法足以胜任你的95%以上的html解析提取问题以及风变编程中所有html解析与提取的问题。
为什么我不把所有知识都讲给你因为学BeautifulSoup就可能需要好多个关卡了我们的目的只是带领你走一条快速入门的路。
学无止境当这些知识都被你掌握而且练习了更多的项目之后就有余力去自学和拓展更多的知识了。
即便我只是挑了重点之中的重点为你讲解解析数据的方法这一关的知识量还是有些大在学完这个关卡之后你必须再回过头复习一遍这对你去理解和记忆这些知识是相当有帮助的。
通过这一关的学习你就搞明白了用bs库解析数据和提取数据的方法只要数据在html里你都可以拿到了。
下一关我们会进行BeautifulSoup库的相关实操务求咱们把所学的都用好~