网络数据爬取(一)初试BeautifulSoup

学习网络数据采集(一)

创建一个网络爬虫来抓取 http://www.pythonscraping.com/pages/warandpeace.html这个网页。

        在这个页面里,小说人物的对话内容都是红色的,人物名称都是绿色的。

抓出整个页面,然后创建一个 BeautifulSoup 对象:

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bs0bj = BeautifulSoup(html,"lxml")
nameList = bs0bj.findAll("span",{"class":"green"})
for name in nameList:
    print(name.get_text())

运行结果(返回的为人物名称列表,仅列出部分结果):

Anna
Pavlovna Scherer
Empress Marya
Fedorovna

 知识点一:

在BeautifulSoup中定义了两个函数:

                                             findAll(tag, attributes, recursive, text, limit, keywords)
                                             find(tag, attributes, recursive, text, keywords)

         在 95% 的时间里都只需要使用前两个参数: tag 和 attributes 。

标签参数tag-----传一个标签的名称或多个标签名称组成的 Python列表做标签参数,如:

.findAll({"h1","h2","h3","h4","h5","h6"}) # 需为标签,不能够为任意字符。

属性参数 attributes----用一个 Python 字典封装一个标签的若干属性和对应的属性值。如:

                                            .findAll("span", {"class":{"green", "red"}}) # (标签,{“标签”:{“属性一”,“属性二”,“属性三”.......}})

递归参数 recursive-----一个布尔变量,默认为True, findAll 会根据你的要求去查找标签参数的所有子标签,以及子
标签的子标签。如果 recursive 设置为 False , findAll 就只查找文档的一级标签。(一般不需设置)

文本参数 text----用标签的文本内容去匹配,而不是用标签的属性。假如我们想查找前面网页中包含“the prince”内容的标签数量,我们可以把之前的 findAll 方法换成下面的代码:

                                             nameList = bsObj.findAll(text="the prince")
                                             print(len(nameList))

范围限制参数 limit----只用于 findAll 方法。 find 其实等价于 findAll 的 limit 等于1 时的情形。

关键词参数 keyword----可以让你选择那些具有指定属性的标签,如:

                                             allText = bsObj.findAll(id="text")
                                             print(allText[0].get_text())

知识点二:

 get_text()函数功能为,去掉超链接、段落和标签都清除掉,只剩下一串不带标签的文字。

用 BeautifulSoup 对象查找你想要的信息,比直接在 HTML 文本里查找信息要简单得多。通常在你准备打印、存储和操作数据时,应该最后才使用 .get_text() 。一般情况下,你应该尽可能地保留 HTML 文档的标签结构。

补充知识点:

标签:如<html>、<span>、<head>、<body>、<abbr>等,一般查看网站源码,发现在符号“<>”里面的便为标签(我猜的!!如有错误请大神指正。)

参考文献:

《Python网络数据采集》

猜你喜欢

转载自blog.csdn.net/hanxia159357/article/details/81950506