忘记API使用Beautiful Soup进行Python Scraping,从Web导入数据文件:第2部分
对于每个网站而言,API并不总是适合您,但Beautiful Soup将永远与您保持联系以从任何网站收集任何类型的数据。
Souce:gurutechnolabs.com
今天,数据发挥在每一个行业的关键作用。大部分数据都来自互联网。大多数公司在一项技术上投入数百万美元来获得用户,而没有从投资产品回报中获利。互联网是如此庞大,它包含有关一个主题的更多信息,而不是你的书呆子教授。
从网络中提取信息的需求和重要性变得越来越响亮和清晰。大部分时间,当我们在您的脸书,推特,LinkedIn中添加任何信息并提供有关Yelp的反馈时,此信息将被视为数据。
而来自互联网的这类数据有很多不同的方式,例如评论,餐厅对Yelp的反馈,Twitter讨论,Reddit用户讨论和股票价格等。您可以收集所有这些数据,组织并分析它。这就是我们将在本教程中讨论的内容。
有几种从Internet提取或导入数据的方法。您可以使用API从任何主要网站检索信息。这就是每个人现在用来从互联网导入数据的东西 – 所有主要网站,如Twitter,Twitch,Instagram,Facebook都提供API来访问他们的网站数据集。所有这些数据都以结构化形式提供。
但是大多数网站都没有提供API。我认为他们不希望我们使用他们的用户数据,或者他们因为缺乏知识而不提供这些数据。
因此,在本主题中,我们将在不使用任何API的情况下从Web导入数据。但在我们处理之前,请看一下本系列的第1部分,因为所有内容都像点一样连接。
你不了解数据文件的东西如果你只是数据科学的入门者,导入数据文件…
如果你是数据科学领域的新手,那么你必须努力学习数据科学概念如此之快。现在……
朝向distascience.com
什么是Beautiful Soup
不要写那个糟糕的页面(来源:crummy.com)
Beautiful Soup是废弃特定网站或互联网数据的最佳图书馆。也是最舒适的工作。它从HTML解析和提取结构化数据。Beautiful Soup会自动将传入的文本转换为Unicode,将传出的版本转换为UTF-8。除了文档没有定义编码之外,您不必记住编码,而Beautiful Soup也无法捕获编码。然后你必须提到原始编码。
规则:要运行您的程序,请使用Jupyter python环境来运行您的程序。而不是一次运行整个程序。我们只是采取了预防措施,因此您的计划不会破坏网站。在开始从那里提取数据之前,请查看网站条款和条件。请务必阅读有关数据合法使用的声明。
基础 – 熟悉HTML
HTML代码在从网站提取数据方面起着至关重要的作用。因此,在我们处理之前,让我们跳转到HTML标记的基础。如果您对HTML标记有一点了解,可以继续前进到下一个级别。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1> Learning about Data</h1>
<p> Beautiful Soup</p>
<body>
</html>
这是HTML网页的基本语法。每个<tag>都在网页内部提供一个块:
1.<!DOCTYPE html>:HTML文档必须以类型声明开头。
2. HTML文档包含在<html>和</ html>之间。
3. HTML文档的元和脚本声明位于<head>和</ head>之间。
4. HTML文档的可见部分位于<body>和</ body>标记之间。
5. 标题标题用<h1>到<h6>标签定义。
6. 标签。
其他有用的标记包括<a>用于超链接,<table>用于表,<tr>用于表行,<td>用于表列。
我们来检查您的HTML页面
按地区划分的亚洲国家列表 – 维基百科
需要额外引用以进行验证。通过向可靠来源添加引文来改进本文。非资源…
en.wikipedia.org
让我们拿一个维基百科页面进行报废。如果你有谷歌浏览器,然后转到页面,首先右键单击它并打开浏览器检查器以检查网页。
检查维基百科页面
从结果中你可以看到wiki表中的表是可排序的,如果你检查它更多,你可以在那里找到你所有的表信息,这太棒了啊!看到你可以用beautiful soup做什么会更令人惊讶。
可维护的Sortanble
让我们开始您的DIY项目
现在我们了解了我们的数据及其所在位置。所以,我们将开始废弃我们的数据。
在我们处理之前,您需要安装或导入一些库。
#Import Libraries
from bs4 import BeautifulSoup
import requests
如果您在安装过程中遇到任何问题,可以在每行前面使用sudo。
请求
它旨在被人类用于与语言进行通信。这表明您不必手动将查询字符串连接到URL,也不必对POST数据进行表单编码。请求将使您能够使用Python发送HTTP / 1.1请求。在其中,您可以通过简单的Python库组合标题,表单数据,多部分文件和参数等内容。它还使您能够以相同的方式获取Python的响应数据。
BS4 – BeautifulSoup
Beautiful Soup是一个Python库,用于从HTML和XML文件中提取数据。它与您最喜欢的解析器一起使用,可以生成自然的操作方式,检查和转换解析树。它通常可以节省程序员数小时或数天的工作量。
# Specify with which URL/web page we are going to be scraping
url = requests.get(‘https://en.wikipedia.org/wiki/List_of_Asian_countries_by_area’).text
我们首先研究给定网页的源代码并使用BeautifulSoup函数构建BeautifulSoup(汤)对象。现在,我们需要使用Beautiful Soap函数,这将帮助我们解析并应用从Wikipedia页面获取的HTML :
# import the BeautifulSoup library so we can parse HTML and XML documents
from bs4 import BeautifulSoup
然后我们将使用Beautiful Soup来解析我们在“URL”变量中收集的HTML数据,并分配一个不同的变量来存储名为“Soup”的Beautiful Soup格式的数据。
#Parse the HTML from our URL into the BeautifulSoup parse tree format
soup = BeautifulSoup(url, “lxml”)
要在我们的网页中获得基础HTML结构的概念,请使用Beautiful Soup的美化功能并进行检查。
#To look at the HTML underlying to the web
print(soup.prettify())
这是我们从prettify()函数得到的:
<!DOCTYPE html>
<html class=”client-nojs” dir=”ltr” lang=”en”>
<head>
<meta charset=”utf-8″/>
<title>
List of Asian countries by area – Wikipedia
</title>
<script>
如果您访问此链接并查看我们的亚洲国家/地区的维基百科页面,我们可以看到有关该国家/地区的更多信息。维基百科表已经设置 – 这使我们的工作更容易。
让我们在我们的美化HTML中查看它:
就是这样,从一个HTML <table>标签开始,类标识符为“wikitable sortable”。我们将记住这个类以供将来使用。如果你在你的程序中,你会看到表是如何组成的,你将看一下使用<tr>和</ tr>标记开始和结束的行。
第一行标题包含<th>标记,而每个俱乐部下面的数据行都有<td>标记。使用<td>标签,我们将告诉Python保护我们的数据。
在我们开始之前,让我们编写一些Beautiful Soup函数来演示它如何捕获并可以从HTML网站向我们提供数据。如果我们执行title函数,Beautiful Soup将返回标题的HTML标记及其中的内容。
#To get the title of the page
soup.title()
我们可以使用此信息开始准备对HTML的攻击。
我们知道数据保留在HTML表中,因此首先,我们关闭Beautiful Soup以检索页面中所有出现的<table>标记,并将它们添加到名为all_tables的数组中。
# use the ‘find_all’ function to bring back all instances of the ‘table’ tag in the HTML and store in ‘all_tables’ variable
all_tables=soup.find_all(“table”)
all_tables
在表类’ wikitable sortable ‘下,我们有国家名称作为标题的链接。
# use the ‘find_all’ function to bring back all instances of the ‘table’ tag in the HTML and store in ‘all_tables’ variable
My_table = soup.find(‘table’,{‘class’:’wikitable sortable’})
My_table
在表类’ wikitable sortable ‘下,我们将国家/地区名称作为标题连接。现在,我们将提取<a>中的所有链接,我们使用了find_all()。
links = My_table.findAll(‘a’)
links
从URL中,我们必须提取标题,即国家/地区的名称。为此,我们必须创建一个国家/地区列表,以便我们可以从链接中提取国家/地区名称并将其添加到列表国家/地区。
Countries = []
for link in links:
Countries.append(link.get(‘title’))print(Countries)
现在,我们必须将列表国家/地区转换为Pandas DataFrame才能在python中工作。
import pandas as pd
df = pd.DataFrame()
df[‘Country’] = Countriesdf
如果您有兴趣大量删除数据,您应该考虑使用Scrapy,一个功能强大的python抓取框架,并尝试将您的代码与一些公共API集成。
数据检索的性能明显高于抓取网页。例如,看看Facebook Graph API,它可以帮助您获取未在Facebook网页上显示的隐藏数据。考虑使用像MySQL这样的数据库后端,当它变得太大时收集你的信息。
这让我们走到了beautiful soup教程的尽头。自信地,它为您提供了很好的工作,可以为您的下一个项目进行一些研究。我们已经引入了获取URL和HTML数据的请求,Beautiful Soup解析HTML和Pandas以将数据转换为数据帧以进行正确的呈现。
你可以在这里找到这个教程笔记本。如果您有疑问,请随时提出。在下一个教程中,我们将讨论API。欢迎在LinkedIn 上与我联系。
参考文献:1.http: //www.gregreda.com/2013/03/03/web-scraping-101-with-python/ 。
2. http://www.analyticsvidhya.com/blog/2015/10/beginner-guide-web-scraping-beautiful-soup-python/ 。
3. https://github.com/stewync/Web-Scraping-Wiki-tables-using-BeautifulSoup-and-Python/blob/master/Scraping%2BWiki%2Btable%2Busing%2BPython%2Band%2BBeautifulSoup.ipynb
4. https://en.wikipedia.org/wiki/List_of_Asian_countries_by_area
5. https://www.crummy.com/software/BeautifulSoup/