通过关键词采集文章采集api(元素中的每一个元素,可以帮助我们做很多事)
优采云 发布时间: 2022-01-01 02:04通过关键词采集文章采集api(元素中的每一个元素,可以帮助我们做很多事)
对于元素中的每个元素,你可以这样做:
仅上述功能就可以帮助我们做很多事情。如果您需要做一些更复杂的事情(或者只是出于好奇),请查看文档。
当然,无论数据多么重要,通常都不会标记为。您需要仔细检查源HTML,根据您选择的逻辑进行推理,并考虑边界条件以确保数据的正确性。下面我们来看一个例子。
9.3.2 例子:密切关注国会
一家数据科学公司的政策副总裁关注数据科学行业的潜在监管,并要求您量化国会对此主题的看法。他特别希望你能找到所有发布“数据”新闻稿的代表。
在发布的时候,有一个页面,所有的链接都代表网站
如果您“查看源代码”,所有 网站 链接看起来像:
让我们从采集从此页面链接到的所有 URL 开始:
这将返回过多的 URL。如果你看看它们,我们以 or 开头,中间有某种名称,结尾是。或者./..
这是使用正则表达式的好地方:
这还是太多了,因为只有435个代表。如果你看列表,有很多重复。我们可以使用 set 来克服这些问题:
众议院总有几个席位是空的,或者可能有一些代表没有网站。无论如何,这已经足够了。当我们检查这些 网站 时,大多数 网站 都有指向新闻稿的链接。例如:
请注意,这是一个相对链接,这意味着我们需要记住原创站点。让我们抓住它:
注意
通常情况下,像这样随便爬一个网站是不礼貌的。大多数网站都会有robots.txt文件,表示可以经常爬取网站(以及不应该爬取的路径),但既然是国会,我们就不需要特别客气了。
如果你滚动查看它们,你会看到大量的/media/新闻稿和媒体中心/新闻稿,以及其他各种地址。其中一个网址是
请记住,我们的目标是找出哪些国会议员提到了“数据”。 “我们将编写一个稍微通用的函数来检查在一页新闻稿中是否提到了任何给定的术语。
如果你访问网站并查看源代码,它似乎在
标签中有每个新闻稿的片段,因此我们将使用它作为我们的第一次尝试:
让我们为它编写一个快速测试:
最后,我们要找到相关的国会议员,并将他们的名字告诉政策副总裁:
当我运行这个时,我得到了一个大约 20 个代表的列表。您的结果可能会有所不同。
注意
如果您查看不同的“新闻稿”页面,它们中的大多数都是分页的,每页只有 5 或 10 个新闻稿。这意味着我们只搜索了每位国会议员的最新新闻稿。更彻底的解决方案是在页面上迭代并检索每个新闻稿的全文。
9.4 使用 API
许多 网站 和 Web 服务提供了相应的应用程序编程接口 (APIS),允许您以结构化格式显式请求数据。这样就省去了爬取数据的麻烦!
9.4.1 个 JSON(和 XML)
因为HTTP是一个文本转换协议,你通过web API请求的数据需要序列化,转换成字符串格式。通常这种序列化使用 JavaScript Object Notation (JSON)。 JavaScript 对象看起来像 Python 字典,使得字符串表达式很容易解释:
我们可以使用 Python 的 json 模块来解析 JSON。特别是,我们将使用它的加载函数,它可以将表示 JSON 对象的字符串反序列化为 Python 对象:
有时 API 提供者可能不那么友好,只向您提供 XML 格式的响应:
我们也可以模仿从HTML中获取数据的方式,使用BeautifulSoup从XML中获取数据;可以在文档中找到更多详细信息。
9.4.2 使用 API 无需认证
大多数 API 现在要求您在使用前验证您的身份。如果我们不愿意强迫自己屈服于这个政策,API 会给出许多其他陈词滥调来阻止我们浏览。所以,我们先来看看GitHub的API。有了它,我们可以做简单的事情而无需验证:
这里的 repos 是 Python 词典的列表,每个词典都代表我 GitHub 帐户中的一个代码存储库。 (你可以随意替换你的用户名来获取你的代码仓库的数据。你有一个GitHub帐户吧?)
我们可以使用它来找出最有可能创建存储库的月份和星期几。唯一的问题是响应中的日期是一个字符串:
Python 本身没有很强大的日期解析器,所以我们需要安装一个:
你只需要 dateutil.parser.parse 函数:
同样的,你可以得到我最近五个代码仓库使用的语言:
通常我们不需要在“自己发出请求并解析响应”的低级别使用 API。使用 Python 的好处之一是有人已经构建了一个库,因此您可以访问几乎所有您感兴趣的 API。这些库可以让事情变得正确,并让您免去查找 API 访问的许多冗长细节的麻烦。 (如果这些库不能很好地完成任务,或者他们依赖的相应API版本失败了,会给你带来巨大的麻烦。)
尽管如此,偶尔还是需要操作自己的API访问库(或者,更常见的是调试别人无法顺利操作的库),所以了解一些细节是很好的。
9.4.3 查找 API
如果需要特定的网站数据,可以查看其开发者部分或API部分的详细信息,然后在网上用关键词“python api”搜索相应的库。
有 Yelp API、Instagram API、Spotify API 等库。
如果您想查看收录 Python 包的 API 列表,那么 GitHub 上的 Real Python 中有一个不错的 API 列表 ()。
如果最后还是找不到你需要的API,你仍然可以通过爬取来获取。这是数据科学家的最后一招。
9.5 案例:使用 Twitter API
Twitter 是一个非常好的数据源。你可以从中获取实时新闻,你可以用它来判断对时事的反应,你可以用它来查找与特定主题相关的链接。有了 Twitter,你几乎可以做任何你能想到的事情,只要你能得到它的数据。数据可以通过其API获取。
为了与 Twitter API 交互,我们需要使用 Twython 库(python -m pip install twython)。实际上有很多 Python Twitter 库,但这是我用过的最好的一个。您也可以尝试其他库。
获取凭据
为了使用 Twitter 的 API,您需要获取一些支持文件(为此您无论如何都必须拥有一个 Twitter 帐户,这样您才能成为活跃且友好的 Twitter #datascience 社区的一部分)。
注意
就像所有我无法控制的指令网站一样,它们在某个时候会过时,但它们现在仍然可以有效一段时间。 (虽然在我写这本书的时候他们至少改变了一次,祝你好运!)
步骤如下:
1. 找到链接。
2. 如果您还没有注册,请点击“注册”并输入您的 Twitter 用户名和密码。
3.点击申请申请开发者账号。
4. 请求访问供您自己使用。
5.填写申请表。需要填写300字(真的)来解释你为什么需要访问数据,所以为了通过审查,你可以告诉他们这本书以及你有多喜欢它。
6.等待一段不确定的时间。
7. 如果您认识在 Twitter 上工作的人,请给他们发电子邮件并询问他们是否可以加快您的申请。否则,请继续等待。
8.审核通过后,请返回,找到“申请”部分,点击“创建申请”。
9.填写所有必填字段(同样,如果描述需要额外字符,您可以讨论这本书以及如何找到它)。
10.点击“创建”。
您的应用程序现在应该有一个“密钥和令牌”选项卡,其中收录一个“消费者 API 公钥”部分,其中列出了“API 公钥”和“API 密钥”。 “注意这些密钥;你需要它们。(而且,保密!它们就像密码。)
小心
不要分享,不要印在书里,也不要记录在 GitHub 公共代码库中。一种简单的方法是将它们存储在不会被签入的credentials.json 文件中,您可以使用json.loads 来检索它们。另一种解决方案是将它们存储在环境变量中并使用 os.environ 检索它们。
使用 Twython
使用 Twitter API 最棘手的部分是身份验证。 (实际上,这是使用大量 API 中最棘手的部分。)API 提供商希望确保您有权访问他们的数据,并且您没有超出他们的使用限制。他们还想知道谁在访问他们的数据。
身份验证有点痛苦。有一个简单的方法,OAuth 2,当你只想做一个简单的搜索时,它就足够了。还有一种更复杂的方式,OAuth 1,当您想要执行操作(例如 Twitter)或(特别是对于我们)连接到 Twitter 流时,这是必要的。
所以我们坚持采用更复杂的方法,我们将尽可能实现自动化。
首先,您需要 API 公钥和 API 密钥(有时分别称为消费者公钥和消费者密钥)。我可以从环境变量中获取,你可以随时替换:
现在我们可以实例化客户端:
提醒
此时,您可能要考虑将 ACCESS_TOKEN 和 ACCESS_TOKEN_SECRET 存储在安全的地方,这样您下次就不必再经过这个严格的流程了。
一旦我们有一个经过验证的 Twython 实例,我们就可以开始搜索了:
如果你运行上面的,你应该得到一些推文,比如:
这不是那么有趣,主要是因为 Twitter 搜索 API 只是向您展示了一些最近的结果。当您从事数据科学时,您通常需要大量推文。这就是流 API 有用的地方。它允许您连接到一个伟大的 Twitter “消防水龙”。要使用它,您需要使用访问令牌进行身份验证。
为了使用 Twython 访问流 API,我们需要定义一个从 TwythonStreamer 继承并覆盖它的 on_success 方法,或者它的 on_error 方法:
MyStreamer 将连接到 Twitter 流并等待 Twitter 向其发送数据。每次它接收到一些数据(这里,一条推文被表示为一个 Python 对象),它被传递给 on_success 方法。如果推文是英文的,此方法会将推文附加到推文列表中。采集到1000条推文后与流的连接将在文本后断开。
剩下的工作就是初始化和启动运行:
它将继续运行,直到采集到 1,000 条推文(或直到遇到错误),此时是分析这些推文的时候了。例如,您可以使用以下方法查找最常见的标签:
每条推文都收录大量数据。您可以自己尝试各种方法,也可以仔细阅读Twitter API 的文档。
注意
在正式项目中,您可能不想依赖内存列表来存储推文。相反,您可能希望将推文保存在文件或数据库中,以便您可以永远拥有它们。
9.6 延伸学习
• pandas 是数据科学用来处理(尤其是导入)数据的主要库。
• Scrapy 是一个运行良好的库,可用于构建更复杂的网络爬虫来执行跟踪未知链接等任务。
• Kaggle 拥有大量数据集。