深色proxyscrape 徽标

Web Scraping 入门:使用 Python 的基础知识和框架

蟒蛇, 搜索, 2021 年 3 月 01 日5 分钟阅读

网络搜刮是一门从网站上以自动和结构良好的形式提取数据的艺术。可以使用 excel、CSV 等不同格式的数据。网络搜索的一些实用案例包括市场调研、价格监测、价格情报、市场研究和线索生成。网络搜刮是充分利用公开数据并做出更明智决策的重要技术。因此,每个人至少要了解网络搜索的基础知识,才能从中受益。

本文将通过使用 Python 框架 "Beautiful Soup "来介绍网络刮擦的基础知识。我们将使用Google Colab作为编码环境。

使用 Python 进行网络抓取的步骤

  1. 首先,我们需要确定要抓取的网页,并向该 URL 发送 HTTP 请求。作为回应,服务器会返回网页的 HTML 内容。为此,我们将使用第三方 HTTP 库来处理 python 请求。
  2. 一旦我们成功访问了 HTML 内容,接下来的主要任务就是解析数据。我们不能简单地通过字符串处理来处理数据,因为大多数 HTML 数据都是嵌套的。这就是解析器的作用所在,它将 HTML 数据做成嵌套的树状结构。最先进的 HTML 解析器库之一是 html5lib。
  3. 接下来是树遍历,包括导航和搜索解析树。为此,我们将使用 Beautiful Soup(第三方 Python 库)。这个 Python 库用于从 HTML 和 XML 文件中提取数据。

现在我们已经了解了网络搜索的工作原理。让我们开始编码吧、

步骤 1:安装第三方库

在大多数情况下,Colab 会随附已安装的第三方软件包。但是,如果导入语句仍然不起作用,可以通过以下命令安装一些软件包来解决这个问题、 

pipinstallrequests
pipinstallhtml5lib
pipinstallbs4
步骤 2:从网页访问 HTML 内容
导入请求 
URL = "http://www.values.com/inspirational-quotes"
r =requests.get(URL) 
print(r.content)

它将显示表格的输出结果、

让我们试着理解一下这段代码、

  1. 在第一行代码中,我们导入了请求库。
  2. 然后,我们指定要抓取的网页的 URL。
  3. 在第三行代码中,我们向指定的 URL 发送 HTTP 请求,并将服务器的响应保存在名为 r 的对象中。
  4. 最后 print(r.content) 返回网页的原始 HTML 内容
步骤 3:解析 HTML 内容
导入请求 
bs4 导入 BeautifulSoup 
  
URL ="http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content,'html5lib') #如果这一行导致错误,请运行 "pip install html5lib " 安装 html5lib 
print(soup.prettify())
输出:

输出结果很长,部分截图附后。

Beautiful Soup 最棒的一点是,它建立在 HTML 解析库(如 html5lib、html.parse、lxml 等)之上,允许同时创建 Beautiful Soap 对象和指定解析器库。 

在上面的代码中,我们通过传递两个参数创建了 Beautiful Soup 对象:

r.content:原始 HTML 内容。
html5lib:指定我们要使用的 HTML 解析器。

最后,将打印 soup.prettify(),以可视化的方式呈现原始 HTML 内容的解析树。

步骤 4:搜索和浏览解析树

现在是时候从 HTML 内容中提取一些有用的数据了。汤对象包含嵌套结构形式的数据,可以通过编程进一步提取。在我们的例子中,我们正在抓取一个由一些引号组成的网页。因此,我们将创建一个程序来解决这些引号问题。代码如下、

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

在进一步操作之前,建议浏览一下我们使用 soup.prettify() 方法打印的网页 HTML 内容,并尝试找到导航到引号的模式。

现在,我将解释如何在上述代码中实现这一点、 

如果我们浏览引号,就会发现所有引号都在一个 div 容器内,该容器的 id 是 "all_quotes"。因此,我们使用 find() 方法找到该 div 元素(代码中称为表格):

table = soup.find('div', attrs = {'id':'all_quotes'})

该函数的第一个参数是需要搜索的 HTML 标记。find() 方法会返回第一个匹配的元素。您可以试试 table.prettify(),以便更好地了解这段代码的作用。

如果我们将注意力集中在表格元素上,那么该 div 容器会包含每个类为 quote 的 quote。因此,我们将循环浏览每个类为 quote 的 div 容器。

在这里,findAll() 方法非常有用,就参数而言,它与 find() 方法类似,但主要区别在于它返回一个包含所有匹配元素的列表。 

我们使用一个名为行的变量遍历每个引文。

让我们分析一个 HTML 行内容示例,以便更好地理解:

现在请看下面这段代码:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
在这里,我们创建一个字典来保存报价的所有信息。使用点符号来访问嵌套结构。要访问 HTML 元素内部的文本,我们使用.text:

此外,我们还可以添加、删除、修改和访问标签的属性。为此,我们将标签视为字典:

quote['url']= row.a['href']
然后,我们将所有引号添加到名为引号的列表中 

最后,我们将生成一个 CSV 文件,用于保存数据。

文件名="inspirational_quotes.csv

我们将文件命名为 inspirational_qoutes.csv,并将所有语录保存在其中,以便将来使用。下面是我们的 inspirational_quotes.csv 文件的外观、

在上面的输出中,我们只显示了三行,但实际上有 33 行。这意味着,我们只需简单尝试,就能从网页中提取大量数据。 

注意:在某些情况下,网络搜刮被认为是非法的,这可能会导致网站永久屏蔽你的 IP 地址。因此,您需要小心谨慎,只在允许的网站和网页上进行搜刮。 

为什么要使用网络抓取?

在现实世界中,网络搜索可以发挥巨大作用的一些场景包括

创造商机
对于大多数企业来说,销售活动的关键之一是创造销售线索。根据Hubspot 的一份报告,61% 的入站营销人员将产生流量和销售线索作为首要任务。网络搜索可以使营销人员访问互联网上的结构化线索列表,从而在其中发挥作用。
市场研究 

正确的市场调研是每项业务运营中最重要的因素,因此需要高度准确的信息。大容量、高质量和高洞察力的网络搜索(可以是不同大小和形状的)为市场分析提供了动力。这些数据可以成为执行商业智能的非常有用的工具。市场调研的主要重点是以下业务方面:

  • 它可用于分析市场趋势。
  • 它可以帮助我们预测市场定价。
  • 它可以根据客户需求优化入口点。
  • 它对监控竞争对手很有帮助。
创建列表

网络搜刮是一种非常方便且富有成效的技术,可以根据企业类型(如房地产和电子商务商店)创建列表。网络搜刮工具可以帮助企业浏览其商店中竞争对手产品的成千上万个列表,并收集所有必要的信息,如定价、产品详情、变体和评论。只需几个小时就可以完成,这可以进一步帮助创建自己的列表,从而更加专注于客户需求。

比较信息

网络搜索可以帮助各种企业收集和比较信息,并以有意义的方式提供这些数据。比方说,价格比较网站可以从其他各种网站中提取评论、功能和所有基本细节。这些详细信息可以进行编辑和定制,以便于访问。因此,当买家搜索某一特定产品时,可以从不同的零售商那里生成一个列表。因此,网络搜索可以根据消费者的需求显示各种产品分析,从而使消费者的决策过程变得更加容易。

综合信息

网络搜刮可以帮助汇总信息,并以有组织的形式显示给用户。让我们以新闻聚合器为例。网络搜刮将以下列方式使用、

  1. 利用网络搜索,可以收集到最准确、最相关的文章。
  2. 它有助于收集有用的视频和文章链接。
  3. 根据新闻建立时间表。
  4. 根据新闻读者捕捉趋势。

因此,在本文中,我们结合实际用例,深入分析了网络刮擦的工作原理。我们还做了一个非常简单的练习,用 Python 创建了一个简单的网络抓取器。现在,你就可以搜刮你所选择的任何其他网站了。此外,我们还看到了一些实际应用场景,在这些场景中,网络刮擦可以发挥重要作用。我们希望你喜欢这篇文章,而且一切都清晰、有趣、易懂。  

如果您正在为您的网络搜刮项目寻找出色的代理服务,请不要忘记查看 ProxyScrape住宅代理和高级代理。