如何使用 Python 抓取 JavaScript 网站

方法, 蟒蛇, 搜索, 11-02-20225 分钟阅读

网络浏览器使用 Javascript 为用户创造动态的交互式体验。使互联网成为现代生活不可或缺的大部分应用程序和功能都是以 Javascript 的形式编码的。考虑到 Javascript 的早期雏形,网页都是静态的,除了点击链接外,几乎不提供任何用户交互功能。

目录

网络浏览器使用Javascript为用户创造动态的交互式体验。使互联网成为现代生活不可或缺的大部分应用程序和功能都是以 Javascript 的形式编码的。考虑到 Javascript 的早期版本,网页都是静态的,除了点击链接和加载新页面外,几乎不提供任何用户交互功能。 

以下是一些通过 Javascript 实现的动态网站增强功能。

  • 网络表单的输入验证
  • 页面元素的动画,如调整大小、重新定位和渐变
  • 无需重新加载页面即可加载新数据
  • 播放音频和视频
  • 修复浏览器兼容性问题

您可以使用刮擦技术自动从网站上收集结构化数据。网络刮擦也被称为网络数据提取。网络刮擦的一些主要用例如下:

  • 新闻监测
  • 价格情报
  • 潜在客户生成
  • 价格监测
  • 市场调研

让我们先来了解一下搜索网站的必要性。

为什么需要抓取 Javascript 网站?

企业利用网络搜索可以利用大量公开数据做出更明智的决策。以下是网络搜索的一些应用领域。

  • 电子商务
  • 社交媒体
  • 银行业 
  • 财务
  • 市场营销 
  • 房地产
  • 财务
  • 搜索引擎优化
  • 销售线索

以下是公司需要搜索网站的原因。

自动化 - 要复制和粘贴网站上的每一条信息是不可能的。公司使用搜索软件将大部分相关流程自动化。

数据管理 - 在 HTML 配置的网站上,无法使用数据库和电子表格来管理数字和数据。因此,公司使用网络扫描工具来管理数据。

房地产列表 - 房地产中介利用网络搜索来填充其数据库中可供出租或出售的房产。 

购物网站比较数据 - 这些公司利用网络搜索技术从各零售商处搜索定价和产品数据,从而为用户提供他们想要的比较数据。 

行业统计和洞察力 - 公司利用刮擦技术建立庞大的数据库,并从中汲取特定行业的洞察力。例如,一家公司可以搜索和分析大量有关石油价格的数据。然后,该公司就可以向世界各地的石油公司出售其洞察力。

使用 Python 浏览 Javascript 网站

让我们来看看如何使用Selenium搜刮 Javascript 网站。

安装 Selenium 库

您可以使用以下命令安装 Selenium。

pipinstallselenium

安装网络驱动程序

你知道 Selenium 模拟的是真正的浏览器吗?它不会使用你安装的 Chrome 浏览器,而是使用一个驱动程序来运行浏览器。Selenium 网络驱动既指语言绑定,也指各个浏览器控制代码的实现。你必须下载网络驱动程序,并将其添加到路径环境变量中。我们将使用 Firefox 网络驱动程序,你可以通过以下链接安装它。

示例

让我们看一个简单的 selenium 示例,其中涉及收集网站标题。为此,我们将首先在一个 python 文件中导入来自 selenium 的 webdriver,如下所示:

fromseleniumimportwebdriver

我们必须提及 webdriver 所在的路径。然后,我们必须初始化 Firefox Web 驱动程序。

webdriver_path='./'
driver= webdriver.Firefox(WEBDRIVER_PATH)

现在,我们定义 URL 以获取网站标题。

URL ='https://www.google.com'
driver.get(URL)
print(driver.title)

运行上述代码会打开一个 firefox 窗口,在控制台中打印出网站的标题。在本例中,我们以Google的 URL 为例,因此结果将如下所示:

这是 Firefox 网络驱动程序的谷歌页面。打印在控制台上的标题为

我们必须手动关闭已打开的 Firefox 窗口。我们将在代码末尾添加 driver.quit(),以便工作完成后自动关闭窗口。 

fromselenium import webdriver 

webdriver_path ='./'
driver = webdriver.Firefox(WEBDRIVER_PATH) 

URL ='https://www.google.com'
driver.get(URL)
print(driver.title)
driver.quit()

如果要从动态网站收集数据,也可以按照上述步骤操作。例如,如果要检索Youtube的标题,可以使用下面的代码。

fromselenium import webdriver 
 
webdriver_path ='./'
driver = webdriver.Firefox(WEBDRIVER_PATH) 
URL ='https://www.youtube.com'
driver.get(URL)
print(driver.title)
driver.quit()

让我们在这里尝试一些新东西。我们可以编辑搜索框,使用 "键 "类填充 "Selenium "一词,如下图所示。

from selenium.webdriver.common.keysimport Keys

初始化 firefox 网络驱动程序并获取 Youtube 标题后,我们创建了一个对象,其中包含使用 xpath 创建的搜索框。

search_box= driver.find_element_by_xpath('//input[@id="search"]')

然后,我们编辑搜索框的内容,在其中填入 "硒 "一词。

search_box.send_keys('Selenium')

在搜索框中填入所需内容后,我们就可以按 "回车键 "激活搜索。

搜索框.发送键(键值.ENTER)

从下图中可以看到,Youtube 搜索框中包含 "硒 "一词。

使用代理

当您需要本地化网页内容时,就需要使用代理服务器。在短时间内向网站发送过多请求时,也需要使用代理。需要自动测试时,Selenium 也需要代理。不过,为了使用 Selenium 代理来刮擦 Javascript 网站,你需要使用 Selenium 线程来扩展 Selenium 的绑定并访问浏览器发出的底层请求。

要在代理中使用 Selenium,需要安装以下软件包。

fromselenium wireimportwebdriver

安装 Python selenium-wire 库后,您需要提及以下内容:

  • 代理用户名
  • 代理密码
  • 代理URL
  • 代理端口

这里我们以 8080 端口为例。您可以自行设置用户名、密码和所需网站的 URL。

proxy_username = "USER_NAME"
proxy_password = "PASSWORD"
proxy_url = "Any Website URL"
proxy_port = 8080

options = {
    "proxy": {
        "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}:{proxy_port}",
        "verify_ssl": False,
    },
}

对于 Selenium Web 驱动程序来说,住宅代理是最佳选择。因为与数据中心代理不同,它们不容易被发现。它们通过住宅 IP 路由客户请求,比数据中心 IP 赢得更多信任。它们在访问使用 Javascript 的复杂网站(如 Youtube、Google、Instagram 等)时也很有用。

为什么要使用代理来抓取 JS 网站?

由于以下原因,您需要使用代理来搜索网站:

  • 代理用于提高安全性和平衡网站的互联网流量。
  • 网络清除者需要使用代理服务器来隐藏自己的身份,使自己的流量看起来像普通用户的流量。
  • 代理还用于保护网络用户的个人数据。
  • 代理有助于访问被国家审查机制封锁的网站。
  • 您可以使用代理以可靠的方式抓取网站。 
  • 当你需要从在线零售商处抓取产品数据时,代理是非常有价值的。这是因为它们可以让你在特定的地理区域内提出请求,然后你就可以访问网站在该地区显示的特定内容。
  • 代理可以帮助你向目标网站发出大量请求,而不会被禁止。
  • 您可以使用代理无限并发连接到相同或不同的网站。

结论

网络搜索非常重要,因为您可以将其用于以下用途

  • 搜索产品/服务广告,深入了解其预算情况
  • 预测时尚潮流,保持竞争力
  • 搜索社交媒体渠道,发掘潜在客户等。

此外,我们还讨论了如何使用Selenium在 Python 中抓取 Javascript 特色网站。您既可以抓取静态网站的内容,也可以抓取 Youtube 等动态网站的内容。您还需要使用 Selenium 代理进行自动化测试。你可以使用的最佳代理是住宅 代理,因为它们速度超快,而且不像其他代理那样容易被检测到。

希望你已经了解了如何使用 Python 搜刮 Javascript 网站。