【python网络数据采集】再来碗BeautifulSoup汤!
作者:互联网
上一篇我带你品尝了beautifulsoup,这次咱作为干饭人再来一碗BeautifulSoup汤!
首先抛出一个问题:当我们要采集一个网页上特定css样式的内容时,我们怎样操作呢?
首先我们要大致了解一下html的基础知识。
这是一张html structure的示意图,每个html页面均遵循此格式。
咱们可以看到一个页面中有许多tag(标签),我们以书中实例页面来看看:
书中要求抓取所有人名,仔细观察可以发现在这个页面中,人名都是被span tag标记的,用的green class渲染,这样我们的程序就可以判断这是不是要抓取的内容了。
okk,接下来咱开始下厨做汤!!!
#导入所需的函数
from urllib.request import urlopen
from bs4 import BeautifulSoup
#打开要抓取的页面链接
html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsobj = BeautifulSoup(html)
#调用findAll函数
#这句函数的意思是:找出所有tga(标签)为span,class为green的数据
nameList = bsobj.findAll("span", {"class":"green"})
for name in nameList:
print(name.get_text())
#将这些采集到的数据打印出来看看
至此,我们完成了对此页面的人物名称采集。但是不知道细心的你有没有喝出这汤不对啊?感觉少了点儿盐!
在原文中,Anna Pavlovna Scherer是同一个名字,而python似乎将它当成了两个名字处理???
实际上python并没有搞错,放盐这种业余厨师都会的技能作为大厨的python是不会搞错的!!!
咱们可以来看看python到底有没有忘记放盐:
喏,实际上python是记得加盐的,只是在html中Pavlovna Scherer被换行了(文本中看不出来)
所以如果把网页比做菜谱,python是个厨师,那么大厨python是严格按照菜谱将Pavlovna Scherer换行了。
题外话:
①在findAll函数中,获取到的数据是以列表的形式存储的,所以我们可以通过访问列表的方法访问具体的名称:
②通过上面的例子,你有没有好奇为什么透过列表的方式访问的nameList输出会带有span、class等字符串???
原因是在代码
for name in nameList:
print(name.get_text())
#将这些采集到的数据打印出来看看
中,get._text()函数已经将其他的干扰字符串剔除了,只将我们想要的内容保留并输出。
实际上我们还可以这样遍历nameList:
for _ in nameList:
print(_.get_text())
也就是用下划线代替name
③此外,在新版beautifulsoup中,findAll更新为find_all,使用时需注意⚠️
标签:再来,nameList,name,python,text,BeautifulSoup,html,页面 来源: https://blog.csdn.net/weixin_43888800/article/details/113810986