使用 Python 和 Selenium 进行网络抓取

如果你今天的工作是从竞争对手的网站上抓取定价页面信息。你会怎么做?复制粘贴?手动输入数据?当然不行!他们绝对会花费你超级多的时间,而且你可能会犯一些错误。

需要指出的是,Python已经成为最流行的数据抓取编程语言之一,它到底有什么魅力呢?

什么是网页抓取?

网页抓取是从网站提取数据的过程。这可以手动完成,但最好使用一些自动化工具或脚本来高效准确地收集大量数据。从网页复制和粘贴实际上也是进行网页抓取。

为什么使用 Python 进行网页抓取?

Python 被认为是网页抓取的最佳选择之一,原因如下:

  • 易于使用:由于清晰和直观,即使是初学者也可以使用 Python。
  • 强大的库:Python 拥有丰富的库系统,例如 Beautiful Soup、Scrapy 和 Selenium,可简化网络抓取任务。
  • 社区支持:Python 拥有庞大而活跃的社区,为故障排除和学习提供了丰富的资源和支持。

Python Web 抓取路线图

您准备好开始使用 Python 进行网页抓取了吗?在弄清楚基本步骤之前,请确保您知道会发生什么以及如何进行。

掌握网页抓取的基本步骤

网络抓取涉及一个系统的过程,包括四个主要任务:

1. 检查目标页面

在提取数据之前,您需要了解网站的布局和数据结构:

  • 探索网站
  • 分析 HTML 元素
  • 识别关键数据

2. 检索 HTML 内容

要抓取一个网站,首先需要访问它的 HTML 内容:

  • 使用 HTTP 客户端库
  • 发出 HTTP GET 请求
  • 验证 HTML 检索

3.从 HTML 中提取数据

获得 HTML 后,下一步就是提取所需的信息:

  • 解析 HTML 内容
  • 选择相关数据
  • 编写提取逻辑
  • 处理多个页面

4. 存储提取的数据

提取数据后,将其存储为可访问的格式至关重要:

  • 转换数据格式
  • 导出数据

提示:网站是动态的,因此请定期检查和更新您的抓取过程以保持数据是最新的。

网页抓取用例

Python 网页抓取可以应用于多种场景,包括:

  • 竞争对手分析:通过收集网站数据监控竞争对手的产品、服务和营销策略。
  • 价格比较:收集并比较不同电子商务平台的价格,以找到最优惠的价格。
  • 社交媒体分析:从社交媒体平台检索数据,以分析特定标签、关键词或影响者的受欢迎程度和参与度。
  • 潜在客户生成:从网站提取联系方式,创建有针对性的营销列表,同时考虑法律因素。
  • 情感分析:收集新闻和社交媒体帖子以追踪某个主题或品牌的公众观点。

克服网络爬取挑战

网络抓取有其自身的一系列挑战:

  • 多样化的网站结构:每个网站都有独特的布局,需要自定义的抓取脚本。
  • 更改网页:网站可能会在未经通知的情况下更改其结构,因此需要调整您的抓取逻辑。
  • 可扩展性问题:随着数据量的增加,请确保您的抓取工具使用分布式系统、并行抓取或优化代码保持高效。

此外,网站还采用了 IP 封锁、JavaScript 挑战和 CAPTCHA 等反机器人措施。这些措施可以通过轮换代理和无头浏览器等技术来规避。

陷入网络抓取困境?
绕过反机器人检测,简化网络抓取和自动化
免费试用 Nstbrowser!

网页抓取的替代方案

虽然网页抓取功能多样,但也有其他选择:

  • API:一些网站提供 API 来请求和检索数据。API 很稳定,通常不受抓取保护,但它们提供的数据有限,而且并非所有网站都提供它们。
  • 即用型数据集:在线购买数据集是另一种选择,尽管它们可能并不总是能满足您的特定需求。
    尽管存在这些替代方案,网络抓取由于其灵活性和全面的数据访问能力仍然是一种流行的选择。

使用 Python 踏上您的网络抓取之旅,释放在线数据的巨大潜力!

如何使用 Python 和 Selenium 进行网页抓取?

步骤 1. 前提

首先,我们需要安装我们的shell:

pip install selenium requests json

安装完成后请新建scraping.py文件并在文件中引入我们刚刚安装的库:

import json
from urllib.parse import quote
from urllib.parse import urlencodeimport requests
from requests.exceptions import HTTPError
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By

步骤2. 连接到Nstbrowser

为了进行准确的演示,我们将使用 Nstbrowser(一款完全免费的反检测浏览器)作为完成我们任务的工具:

def create_and_connect_to_browser():host = '127.0.0.1'api_key = 'xxxxxxx' # your api-keyconfig = {'once': True,'headless': False, # headless'autoClose': True,'remoteDebuggingPort': 9226,'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','fingerprint': {  # required'name': 'custom browser','platform': 'windows', # support: windows, mac, linux'kernel': 'chromium', # only support: chromium'kernelMilestone': '120','hardwareConcurrency': 4, # support: 2, 4, 8, 10, 12, 14, 16'deviceMemory': 4, # support: 2, 4, 8'proxy': '', # input format: schema://user:password@host:port eg: http://user:password@localhost:8080}}query = urlencode({'x-api-key': api_key, # required'config': quote(json.dumps(config))})url = f'http://{host}:8848/devtool/launch?{query}'print('devtool url: ' + url)port = get_debugger_port(url)debugger_address = f'{host}:{port}'print("debugger_address: " + debugger_address)

连接到Nstbrowser之后,我们通过Nstbrowser返回给我们的调试器地址连接到Selenium:

def exec_selenium(debugger_address: str):options = webdriver.ChromeOptions()options.add_experimental_option("debuggerAddress", debugger_address)# Replace with the corresponding version of WebDriver path.chrome_driver_path = r'./chromedriver' # your chrome driver pathservice = ChromeService(executable_path=chrome_driver_path)driver = webdriver.Chrome(service=service, options=options)

步骤 3. 抓取网页

至此,我们已经成功通过 Selenium 启动了 Nstbrowser。现在开始抓取吧!

  • 访问我们的目标网站,例如:IMDb Top 250 Movies
driver.get("https://www.imdb.com/chart/top")
  • 运行我们刚刚写的代码:
python scraping.py

如您所见,我们成功启动了 Nstbrowser 并访问了目标网站。

  • 打开Devtool可以看到我们想要爬取的具体信息,没错,显然都是具有相同dom结构的元素。

Devtool 提供具体信息

我们可以使用Selenium来获取这种dom结构,并分析其内容:

movies = driver.find_elements(By.CSS_SELECTOR, "li.cli-parent")
for row in movies:title = row.find_element(By.CLASS_NAME, 'ipc-title-link-wrapper') # get titleyear = row.find_element(By.CSS_SELECTOR, 'span.cli-title-metadata-item') # get created yearrate = row.find_element(By.CLASS_NAME, 'ipc-rating-star') # get ratemove_item = {"title": title.text,"year": year.text,"rate": rate.text}print(move_item)
  • 再次运行我们的代码,可以看到终端已经输出了我们想要获取的信息。

当然,在终端输出这些信息并不是我们的目的,接下来我们需要将爬取到的数据保存起来。

我们使用 JSON 库将检索到的数据保存到 JSON 文件:

movies = driver.find_elements(By.CSS_SELECTOR, "li.cli-parent")
movies_info = []
for row in movies:title = row.find_element(By.CLASS_NAME, 'ipc-title-link-wrapper')year = row.find_element(By.CSS_SELECTOR, 'span.cli-title-metadata-item')rate = row.find_element(By.CLASS_NAME, 'ipc-rating-star')move_item = {"title": title.text,"year": year.text,"rate": rate.text}movies_info.append(move_item)
# create the json file
json_file = open("movies.json", "w")
# convert movies_info to JSON
json.dump(movies_info, json_file)
# release the file resources
json_file.close()
  • 运行代码,打开文件,可以看到 scraping.py 旁边多了一个 movies.json,这意味着我们成功使用 Selenium 连接 Nstbrowser,并抓取到了目标网站的数据!

总结

如何使用 Python 和 Selenium 进行网页抓取?本详细教程涵盖了您正在寻找的所有内容。为了全面了解,我们讨论了 Python 用于网页抓取的概念和优势。然后,以免费的反检测浏览器 - Nstbrowser 为例,介绍具体步骤。我相信您现在已经学到了很多有关 Python 网页抓取的知识!是时候操作您的项目并收集数据了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Qwen-Agent 将 8k 上下文记忆扩展到百万量级

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

C# 绘图及古诗填字

绘图 绘图的结果如下: 绘图部分主要使用了 Bitmap、Graphics 具体的函数是 MakeMap 入参说明 string bg : 背景图 Rectangle rect :绘图区域 int row_count :行数 int col_count :列数 string fn :保存到的文件 …

Unity Standard shader 修改(增加本地坐标裁剪)

本想随便找一个裁剪的shader,可无奈的是没找到一个shader符合要求,美术制作的场景都是用的都标准的着色器他们不在乎你的功能逻辑需求,他们只关心场景的表现,那又找不到和unity标准着色器表现一样的shader 1.通过贴图的透明通道做…

【Java 百“练”成钢】Java 基础:类和对象

Java 基础:类和对象 01.打印信息02.打印类的简单名称03.打印类的 ClassLoader04.获取类的方法05.获取类的Package06.创建一个对象数组07.计算圆的面积08.计算圆的周长09.创建具有私有访问修饰符的成员10.创建带访问修饰符的成员11.将对象作为参数传递12.通过类对象获…

关于智慧校园建设的几点建议

随着科技的迅猛发展,智慧校园建设已成为现代教育的重要组成部分,对于提升教育质量、改善学生学习环境具有重要意义。为此,我提出以下几点建议,以帮助智慧校园建设更加有效和可持续。 首先,应注重基础设施建设。智慧校园…

Anaconda3 下载安装卸载

1、下载 官网链接:Download Now | Anaconda Step1:进入官网 Anaconda | The Operating System for AI Step2:进入下载页面,选择要Anaconda软件安装包 2、安装 Step1: 点击 Anaconda3-2024.02-1-Windows-x86_64.exe 安装包进行安…

线控转向 0 -- 线控转向介绍和专栏规划

一、线控转向介绍 高阶自动驾驶核心部件:英创汇智线控转向解决方案 _北京英创汇智科技有限公司 (trinova-tech.com) 线控转向的系统组成详细介绍大家可以看上面这个链接;我这里也只从里面截取一些图片,简单说明。 1、结构组成 线控转向分为…

如何打造不一样的景区文旅VR体验馆项目?

近年来影院类产品迅速火爆,市面上的产品越来越多,投资者可以说是挑花了眼。为了助力投资者实现持续盈利,今天来给大家分析目前普乐蛙大爆新品悬空球幕飞行影院与其他5D/7D影院有哪些区别,给大家的创业投资之路避避雷~ 那我们正式开…

vue26:vue的环境搭建

vue环境安装配置 在点击上方链接前,注意!!!!!!!! 下方的红字!!!!!!!!&am…

计算机网络--应用层

计算机网络–计算机网络概念 计算机网络–物理层 计算机网络–数据链路层 计算机网络–网络层 计算机网络–传输层 计算机网络–应用层 1. 概述 因为不同的网络应用之间需要有一个确定的通信规则。 1.1 两种常用的网络应用模型 1.1.1 客户/服务器模型(Client/Se…

【产品研发】NPDP价值作用概述

导读:本文结合个人实践和思考对NPDP的价值和作用做了概述说明,对于产品经理而言掌握NPDP的知识体系并且应用到实际工作中,这是非常有必要的。走出以往狭隘的产品研发工作认知,以开放心态学习国际化产品创新开发流程将极大提升产品…

【大学物理】期末复习双语笔记

3 vectors and scalar 20 damped harmonic motion,forced harmonic motion, superposition of SHM damped harmonic motion underdamped motion:欠阻尼 critical damped零界阻尼 over damped过阻尼 energy of damped harmonic motion application of damped oscillation:减震器…

链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点

递归反转单链表(头插法反转部分链表 要弄pre cur 还有nxt(临时变量保存下一个结点 P0指到需要修改的链表的前一个结点 class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummynew ListNode(-1,head);L…

打造智慧校园信息系统,提升学校科技实力

在如今数字化的时代,打造智慧校园信息系统已成为提升学校科技实力的关键。随着科技的迅猛发展,学校需要跟上时代步伐,利用先进技术建设一个高效、智能的信息系统,为学生、教师和管理人员提供更好的学习和工作环境。 智慧校园信息系…

vue27:脚手架详细介绍main.js

在 Vue.js 中,render 函数是一个可选的选项,它允许你自定义组件的渲染逻辑。 如果你没有在 Vue 实例中提供 render 函数,Vue 将使用模板(template)来生成虚拟 DOM。 以下是render / template 两种方式的比较&#…

力扣hot100:739. 每日温度/54. 螺旋矩阵

文章目录 一、 739. 每日温度二、54. 螺旋矩阵1、模拟螺旋矩阵的路径2、按层模拟 一、 739. 每日温度 LeetCode:739. 每日温度 经典单调栈问题,求下一个更大的数。 使用单调递减栈,一个元素A出栈,当且仅当它第一次出现比它更大…

Linux进程替换 自主shell程序

本篇将要讲解有关进程中最后一个知识点——进程替换,其中主要介绍有关进程替换的六个函数,直接从函数层面来理解进程替换(在使用函数的过程中,也会对进行替换进行解释)。本篇主要围绕如下的进程替换函数: 以…

QT系列教程(9) 主窗口学习

简介 任何界面应用都有一个主窗口,今天我们谈谈主窗口相关知识。一个主窗口包括菜单栏,工具栏,状态栏,以及中心区域等部分。我们先从菜单栏说起 菜单栏 我们创建一个主窗口应用程序, 在ui文件里的菜单栏里有“在这里输入”的一个…

windows安装conda

1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软…

mnist的t-SNE二维空间可视化MATLAB

%% filename ‘mnist’; digitDatasetPath fullfile(matlabroot,‘toolbox’,‘nnet’,‘nndemos’, … ‘nndatasets’,‘DigitDataset’); imds imageDatastore(digitDatasetPath, … ‘IncludeSubfolders’,true,‘LabelSource’,‘foldernames’); %% labelCount coun…