欢迎关注 “小白玩转Python”,发现更多 “有趣”
引言
网络爬虫是一项十分有趣且富有挑战性和回报性的工作。只要遵循一些规则,几乎可以抓取到任何你想要的东西。之所以要遵循一些规则,是因为爬虫的行为可能会影响到抓取的网站,所以要牢记这一点哦。对于数据科学家和研究人员而言,你拥有的数据越多,你的估计就可能越准确。
本文我们将用到requests和Beautifulsoup这两个库,requests库读取URL,BeautifulSoup库从已解析的HTML或XML文档中创建数据结构。
可以通过以下命令导入这两个库:
import requests
from bs4 import BeautifulSoup
下面让我们看一下这六条关键命令:
requests.get():
Get() 函数非常简单,因为它实际上是“下载”或“读取”我们获取的URL。它基本上是从网站上获取html(或xml)并将其导入程序中,其用法如下:
html_doc = requests.get(url)
然后,我们可以将获取的html文档传递到BeautifulSoup提供的解析中,如下所示:
soup = BeautifulSoup(html_doc, 'html.parser')
find()
现在已经获得了网站的数据,让我们尝试探索一下吧。在遍历从HTML或XML文件时,可能只希望获得特定标记的一个结果时,就可以使用find()方法。假设要从下面这个网站获得第一个标签为'a'的条目(https://www.crummy.com/software
/BeautifulSoup/bs4/doc/),方法如下所示:
soup.a
# <a class="sister" href="http://example.com/elsie"
id="link1">Elsie</a>
find_all()
现在已经找到了标记为'a'的标签,我们也可以获得所有标记为'a'的标签:
soup.find_all('a')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
str.strip()
当直接从互联网获取数据时,数据的格式通常很糟糕,带有大量的空格。strip函数就可以帮我们去掉这些空格。这个函数本身并不是BeautifulSoup的原生函数,但是它仍然是一个非常重要的函数。可以这样使用它:
>>> ‘ a’.strip()
'a'
当然也可以使用lstrip或rstrip,它们的作用显而易见:
>>> ‘ a ’.lstrip()
'a '
get_text()
下载完所有内容后,我们只想阅读原始文本,只需按以下步骤从对象中获取它即可:
print(soup.get_text())
diagnose()
开始使用BeautifulSoup后,可能想了解更多有关它的工作原理的信息,则diagnose()函数非常有用,因为通过将soup对象传递给它,该函数将准确打印出正在执行的操作。
from bs4.diagnose import diagnose
with open("bad.html") as fp:
data = fp.read()
diagnose(data)
# Diagnostic running on Beautiful Soup 4.2.0
# Python version 2.7.3 (default, Aug 1 2012, 05:16:07)
# I noticed that html5lib is not installed. Installing it may help.
# Found lxml version 2.3.2.0
#
# Trying to parse your data with html.parser
# Here's what html.parser did with the document:
# ...
结束语
探索的越多就会发现越方便的工具,网络爬虫从来不是一件容易的事情。花费一些精力才能真正从网站中爬取数据。合理使用上面的六条命令,将会使数据获取的过程更加方便快捷。
· END ·
HAPPY LIFE