首页 > 云开发 > Python > 正文

后台-系统设置-扩展变量-手机广告位-内容正文顶部

忘记API 使用Beautiful Soup进行Python Scraping,从Web导入数据文件:第2部分

Python

忘记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'] = Countries

df

如果您有兴趣大量删除数据,您应该考虑使用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/

文章来源:medium,作者:。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:william.shi#ucloud.cn(邮箱中#请改为@)进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
后台-系统设置-扩展变量-手机广告位-内容正文底部

推荐文章

热门标签

    热门文章 最新文章 文章云

站内导航

全站搜索