硒网络抓取--2024 年您需要了解的一切

指南, 代理, 蟒蛇, 擷取, Mar-06-20245 分钟阅读

数据收集是过去十年中被大量使用的一个术语。每家公司都希望充分了解自己的客户,以便制定最佳战略来解决人们的问题。通常,以技术为基础的组织都有数据湖来获取数据进行分析。但有时,他们必须在线收集数据,以便

数据收集是过去十年中被大量使用的一个术语。每家公司都希望充分了解自己的客户,以便制定最佳战略来解决人们的问题。通常,以技术为基础的组织都有数据湖来获取数据进行分析。但有时,他们不得不在线收集数据,以进行各种分析,如情感分析、搜索引擎优化分析和监控。网络搜刮是从目标源中提取数据并将其保存到本地或云存储中的方法。Python 是执行网络搜索的最佳编程语言。Python 中有许多库可以帮助你从网站、博客和其他在线资源中抓取数据。其中最有名的是 BeautifulSoup 和 Selenium。在本文中,我们将了解如何执行 Selenium 网络刮擦。

什么是网络抓取?

网络搜刮是从各种在线网页中提取大量数据。如今,机器学习和人工智能初学者投入了大量时间学习不同的网络搜刮方法。网页抓取由两部分组成,即爬虫和抓取器。爬虫负责从目标源中查找和定位必要的数据,然后刮板帮助从源中提取这些数据。

硒--它是什么?

Selenium 是一个免费开源的 Python 库,是一个自动化测试框架,主要用于在各种浏览器上测试和验证网络应用程序。你可以使用任何编程语言,如 C#、Java 和我最喜欢的 Python。Selenium 软件是一套工具,包括

  • Selenium 集成开发环境 (IDE)。
  • 硒遥控器。
  • Webdriver.
  • 硒网格

让我们来看看如何使用 Selenium 和 Python 自动执行整个网络扫描过程。

问题陈述:

我们的目标是搜刮过去十年 NBA 球员的姓名和薪水,然后将数据保存为数据帧格式。注:为了学习和解释 Selenium 网络刮擦的工作原理,我们使用了 hoopshype 网站。

安装 Chrome 浏览器驱动程序

在开始网络搜索之前,有必要在电脑上安装 Chrome 浏览器驱动程序。安装哪个 Chrome 浏览器驱动程序取决于您使用的 Chrome 浏览器版本。您可以按照以下步骤进行检查:

第 1 步: 打开 Chrome 浏览器-> 点击浏览器右上角的 "汉堡 "图标。

第 2 步: 点击 "汉堡 "图标后,你会看到 "帮助 "选项。点击 "帮助 "并选择 "关于 Chrome 浏览器"。点击后,你将看到版本页面。下图是谷歌浏览器的版本页面。

谷歌浏览器版本窗口

注意:如果有任何更新,最好先安装这些更新,然后再安装 Chrome 浏览器驱动程序。

找到版本后,请访问 Chrome 浏览器驱动程序网站,根据您的 Chrome 浏览器版本下载驱动程序。

安装 Selenium:

安装selenium软件包最简单的方法是通过PIP(Package Installer Python)。你可以打开任何笔记本(Juypter 或 Google Collab),然后输入以下 python 代码:

pipinstallselenium

上述命令下载了 Selenium 的所有依赖包。现在,让我们看看如何使用 Selenium 实现网络刮擦。

使用 Selenium 进行网络抓取

我们建议创建一个虚拟环境并实施网络搜索过程,以便更好地进行实践。让我们在本例中使用 Juypter 笔记本进行网络刮擦。

第 1 步:导入所有必要的库。Pandas 和 Selenium Webdriver 是用于简单网络刮擦的主要库。导入所有必要库的 python 代码如下所示:

fromseleniumimportwebdriver
fromselenium.webdriver.common.keysimportkeys
importpandasaspd

第 2 步: 导入库后,下一步就是启动 Chrome 浏览器驱动程序。启动驱动程序的 python 代码如下所示

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

注意:在参数中,请指明 Chrome 浏览器驱动程序在本地系统中的完整路径。

第 3 步:启动驱动程序后,Chrome 浏览器应在新窗口中打开。但窗口应该是空的,因为没有 feed URL。目标 feed URL 的 python 代码如下所示:

seed_url ='https://hoopshype.com/salaries/players/'
driver.get(seed_url)

第 4 步:输入 feed URL 后,在新窗口中就能看到目标网站。下面的过程是查找每位 NBA 球员的姓名。在 Selenium 中,可以通过以下方法查找 HTML 元素:

  • 身份证
  • CSS 选择器
  • XPATH 选择器
  • 名称
  • 班级名称
  • 标签名称

在我们的示例中,让我们看看如何使用 XPATH 选择器检测元素。我们想从这些数据中提取两个细节:

  • 球员姓名
  • 工资

注:也可以使用搜索表单查找网页元素。搜索表单位于检查页面的底部。

第 5 步: 进入目标页面后,您将看到一份球员名单和他们在该赛季(年)的工资。选择任意一个球员姓名并右击。你会得到几个选项。在这些选项中,点击 "检查"。下图为 "检查 "页面。

检查目标日期页面

现在,如上所述,我们的目的是提取球员的名字。因此,第一步是找到单个球员元素和所有球员元素的共同因素。因此,在同一过程中,右键单击玩家名称并检查它。这将直接带你进入元素位置。在我们的场景中,我们不是取一个玩家的名字,而是取所有玩家的名字。所有球员的共同元素是 "td class-'name'"。因此,如果我们使用这个元素并对其进行循环,就能得到所有球员的名字。提取球员姓名的 python 代码如下所示:

nba_players = driver.find_elements_by_xpath('//td[@class="name"]')
players_list =[]
for p in range(len(nba_players)):
    players_list.append(nba_players[p].text)
打印(players_list)

说明如上所述,我们使用 XPATH 方法查找 HTML 代码元素。显然,我们需要多个元素的 XPATH 路径。最简单的方法是找到名称元素,即 "td class-name"。右键单击该元素并选择 "复制"。你会看到很多选项,如复制 JS 路径和复制 XPATH。选择复制 XPATH,就会自动获得元素的 XPATH 位置。将路径粘贴到 find_elements_by_XPATH 参数中。粘贴路径后,Python 就会开始识别这些元素并获取它们的地址,而不是实际名称。为了获取球员的真实姓名,我们将循环函数,并将结果追加到一个空列表中作为输出。执行上述代码片段后,输出结果如下图所示。

提取球员姓名的输出结果

现在我们有了球员的名字,下一步就是获取他们各自的薪水。提取姓名的具体过程是为了获取薪金详情。

第 6 步: 使用 python 代码提取薪资数据,如下所示:

players_salary=driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]')
salary_list=[]
forsin range(len(players_salary)):
    salary_list.append(players_salary[s].text)
打印(salary_list)

解释:过程是一样的。唯一不同的是选手之间的共同元素。网页元素 "td class-'hh-salaries-sorted'"就是共同元素。找到该元素后,我们创建一个空列表来循环整个函数,并将薪金详情追加到空列表中。输出结果应如下图所示:

提取球员薪资的输出结果

第 7 步:现在,我们已经从目标中获取了数据。但是,如果仔细观察,这些数据只有一个季节(当年)的数据。我们的问题陈述要求提取过去十年的数据。这就是浏览器自动化的用武之地。不用担心。我们可以使用与循环函数相同的代码来提取季节数据。用于自动执行刮擦过程并获取过去十年数据的 python 代码如下所示:

for i in range(2010,2021):
    page_number =str(i) +'-'+str(i+1) +'/'
    feed_url ='https://hoopshype.com/salaries/players/'+ page_number
    driver.get(feed_url)
    
    球员 = driver.find_elements_by_xpath('//td[@class="name"]')
    salaries = driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]') 
    
    球员 =[]
   forjin range(len(players)):
        player.append(players[j].text)
    
    工资 =[]
   forkin range(len(salaries)):
        salary.append(salaries[k].text)

说明如上所述,我们的目标是获取过去十年的数据。为此,我们必须实施分页。分页是添加连续数字(通常是页码)以确定页面顺序的过程。季节以 YYYY/MM 格式表示。为了识别这一点,我们使用了连接技术。之后,我们在循环中使用相同的过程和相同的代码。

第 8 步: 最后一步是将数据保存在数据帧中,以便进行各种分析,如情感分析和竞争分析。将数据保存到数据帧中的 python 代码如下所示:

df = pd.DataFrame(columns=['Player','Salary','Year'])
data =list(zip(player[1:],salary[1:])) 
df1 = pd.DataFrame(data,columns=['Player','Salary']) 
df1['Year']=i
df = df.append(df1)

注意:在代码的第二行,你可以看到我做了切片处理。这样做的原因是,当你看到球员姓名和薪水的输出时,第一个索引,即索引 0,是 "球员 "和 "日期"。这些项目对表格的重要性不大。因此,我们可以放弃这些项目。

解释:我们创建了一个以 "球员"、"薪水 "和 "年份 "为列的空框架。我们使用 Zip 函数将所有数据累加到一个列表中,然后将列表追加到数据帧中。数据添加到数据框后,就可以结束自动化并关闭驱动程序了。如有需要,您可以将数据框保存为 CSV 文件,以便用于数据存储库。

就是这样!你已经成功地使用 Selenium 和 Python 完成了自动化和网络刮擦。

常见问题:

1.Selenium 是否适合网络刮削?
是的,如果您打算抓取使用 JavaScript 的动态网页。但对于 Python 来说,它也是一个不错的选择。Selenium 是对网页抓取感兴趣的初学者的良好起点。
2.BeautifulSoup 和 Selenium 哪个更好?
这个答案取决于目标网页的类型和项目的规模。如果您要搜刮的是结构良好的小型静态页面,那么 BeautifulSoup 会更好。如果您的项目涉及结构复杂的动态网页,那么硒化网页抓取可能是最佳选择。
3.什么是最好的网络搜刮工具?
Python 是执行网络搜索的最佳和最有利的工具。BeautifulSoup、Selenium、Request 等 Python 库以及 Scrapy 等其他工具都是网络搜索的最佳工具。

结论

本文介绍了如何在本地系统中安装 Chrome 浏览器驱动程序,以自动执行小型网络搜索过程。实时处理大量数据(以 MB、GB,有时甚至是 TB 为单位)涉及复杂的步骤。对于对数据收集、屏幕扫描过程和数据科学感兴趣的初学者来说,Selenium 是一个良好的开端。如前所述,复杂的网络搜刮过程需要大量时间来收集数据。大多数网站都不允许在较长时间内进行网络搜刮;一旦达到这个临界点,网站很可能会屏蔽你的 IP 地址并停止你的网络搜刮过程。为了避免这些困难,建议使用代理。 ProxyScrape我们提供了优秀的住宅代理,最适合网络搜刮等高需求任务。

免责声明:本文仅供学习之用。如果不遵守适当的准则,进行网络搜索可能是非法的。本文不支持任何形式的非法网络搜索。