selenium 爬虫的数据实战

引言

众所周知,Python 有很多的爬虫工具,例如,requests、scrapy、selenium等。但是爬虫有个最难搞的东西就是反爬虫了,使用 requests、scrapy框架爬取速度飞快,但是遇到反爬的网站就得斗智斗勇半天甚至好几天。因此,如果仅仅是一些小项目,没有必要使用其他工具,就使用 selenium 就可以了。

selenium 实战

selenium 的使用方法非常简单,需要进行一些配置,这里我使用的是 谷歌浏览器,其他浏览器请自行搜索~

安装 selenium
pip install selenium
安装谷歌浏览器以及谷歌浏览器驱动

浏览器驱动 是和 浏览器对应的。 不同的浏览器 需要选择不同的浏览器驱动。

目前主流的浏览器中,谷歌 Chrome 浏览器对 Selenium自动化的支持更加成熟一些。

推荐大家使用 Chrome浏览器 。

确保Chrome浏览器安装好以后,请大家打开下面的连接,访问Chrome 浏览器的驱动下载页面

注意浏览器驱动 必须要和浏览器版本匹配,大版本一致就可以了。

比如,谷歌浏览器版本为 103,那么就下载 103 开头的就可以了~

省略浏览器驱动路径

下载的浏览器驱动是一个压缩包, 解压之后放到一个容易找到的位置,例如 C 盘根目录

我们可以把浏览器驱动 所在目录 加入环境变量 Path , 写代码时,就可以无需指定浏览器驱动路径了,像下面这样。

wd = webdriver.Chrome()

然后可以配置一些初始化的参数,代码这里我整理好了,直接拿去用就对了,url为1688网站,已经提前搜索了商品的url地址。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ChromeOptions,ActionChains# 1688搜索页商品数据url
url = 'https://s.1688.com/selloffer/imall_search.htm?keywords=%C5%AE%D7%B0&n=y&netType=1%2C11%2C16&spm=a260k.22518165.search.0'# 初始化浏览器
def driver_init():# 加载配置数据profile_dir = r'--user-data-dir=C:\Users\hjl\AppData\Local\Google\Chrome\User Data'c_option = webdriver.ChromeOptions()c_option.add_experimental_option('useAutomationExtension', False)c_option.add_experimental_option('excludeSwitches', ['enable-automation'])prefs = {'profile.default_content_setting_values':{'notifications': 2},'profile.password_manager_enabled': False,'credentials_enable_service': False}c_option.add_experimental_option('prefs', prefs)# 开发者模式防止被识别出# 网址:https://blog.csdn.net/dslkfajoaijfdoj/article/details/109146051c_option.add_experimental_option('excludeSwitches', ['enable-automation'])c_option.add_argument("--disable-blink-features=AutomationControlled")# c_option.add_experimental_option('w3c', False)c_option.add_argument(profile_dir)driver = webdriver.Chrome(chrome_options=c_option)# 执行cdp命令driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})return driver

接着,定义一个获取商品标题、价格、购买人数等参数的方法

def get_goods_info(driver):# 获取商品信息的列表goods_list =  driver.find_element(By.ID, 'sm-offer-list').find_elements(By.CLASS_NAME, 'space-offer-card-box')print('-----------------')print('开始爬取数据,数据长度为:', len(goods_list))for li in goods_list:link_div = li.find_element(By.CLASS_NAME, 'mojar-element-title').find_element(By.TAG_NAME, 'a')link = link_div.get_attribute('href')title = li.find_element(By.CLASS_NAME, 'mojar-element-title').find_element(By.CLASS_NAME, 'title').texttry:# 这个地方容易报错,所以用try,不知道为什么,有毒price_div = li.find_element(By.CLASS_NAME, 'mojar-element-price')price = price_div.find_element(By.CLASS_NAME, 'showPricec').textsale_sum = price_div.find_element(By.CLASS_NAME, 'sale').textif sale_sum == '':sale_sum = '0'except:continueprint('-----------------')print(title, price, sale_sum)

最后,使用程序入口函数启动爬虫程序~

注意,因为1688有部分商品数据是需要动态加载的,因此我们需要让爬虫程序滑动一下页面,触发数据加载之后再去爬取。

# 程序入口
if __name__ == '__main__':driver = driver_init()driver.implicitly_wait(3)  # 打开链接获取商品信息driver.get(url)# 睡眠1秒,等待浏览器加载完毕time.sleep(2)# 循环爬取40页数据for i in range(40):print(f'-----------------第{i+1}页-----------------')# 等待浏览器加载完毕driver.implicitly_wait(7)# 获取当前窗口句柄original_window = driver.current_window_handle# 获取下一页的按钮next_btn = driver.find_element(By.CLASS_NAME, 'fui-next')time.sleep(1)# 慢慢向下滚动for i in range(1, 3):driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(1)# 再慢慢向上滚动for i in range(1, 3):driver.execute_script("window.scrollTo(0, 0);")time.sleep(1)# 滑动鼠标到页面中部ActionChains(driver).move_by_offset(0, 300).perform()time.sleep(1)# 获取商品信息get_goods_info(driver)# 点击下一页try:next_btn.click()except:break

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓

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

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

相关文章

2024年2月深度学习的论文推荐

我们这篇文章将推荐2月份发布的10篇深度学习的论文 Beyond A*: Better Planning with Transformers via Search Dynamics Bootstrapping. https://arxiv.org/abs/2402.14083 Searchformer是一个基于Transformer架构的人工智能模型,经过训练可以模拟A星寻路算法&a…

【重要公告】BSV区块链协会宣布将启动多项动态安全增强措施

​​发表时间:2024年2月16日 2024年2月16日,瑞士楚格 - BSV区块链协议的管理机构BSV区块链协会(以下简称“BSV协会”)宣布对其运营模式实施全新的安全架构,其中包括引入网络访问规则和数字资产找回协议,以及…

分享一点PDF中获取表格的探索过程

版面分析:如何得到标题、如何的得到段落(正确的段落)、如何得到表格、如何得到图片,图和得到图片上的文字? 还有细节问题:双栏和多栏的问题、公式问题 扫描件:扫描件本质上是图片,如…

Java 网络通信

两台或多台设备通过一定物理设备连接起来构成了网络。 根据网络的覆盖范围不同,对网络分类: 局域网:覆盖范围小,仅仅覆盖一个教室或一个机房。城域网:覆盖范围较大,可以覆盖一个城市。广域网:…

Python轴承故障诊断 (14)高创新故障识别模型

目录 往期精彩内容: 创新点: 前言 1 模型整体结构 1.1 模型整体结构如下所示: 1.2 创新点详细介绍: 2 轴承故障数据的预处理 2.1 导入数据 2.2 故障FFT变换可视化 2.3 故障VMD分解可视化 2.4 故障数据的特征预处理数据集…

基于B/S+MySQL+Tomcat开发的旅游信息管理系统

基于B/SMySQLTomcat开发的旅游信息管理系统 项目介绍💁🏻 塞北村镇旅游网站设计主要用于实现旅游景点信息管理,基本功能包括:主界面模块设计,用户注册模块,旅游景点模块,酒店预订模块&#xff0…

如何利用IP代理高效采集产品数据,打造爆品?

文章目录 一、什么是网络爬虫?二、普通人如何通过网络爬虫赚钱?2.1、心得分享2.2、工具自动化收集信息 三、 动态IP代理3.1、覆盖范围3.2、性价比3.3、教程中心F&Q使用教程 3.4、在网络数据采集中的重要性 四、实战应用案例一:ebay电商【…

C++面试常见八股分享

1.unordered_set和set,unordered_map和map的区别 set 和 map 是 C STL 中的两种关联容器,而 unordered_set 和 unordered_map 是 C11 新增的基于哈希表的关联容器。它们之间的主要区别在于底层的数据结构和操作复杂度。 set 和 unordered_set&#xff1…

IntelliJ IDEA 常用快捷键和下载链接

下载链接(windows) 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 编码时: 跳转到引用方法的地方 (有多个引用时会出现下拉列表) ctrl鼠标左键 跳转后回到原来的地方 …

uniapp:启动图 .9png 制作教程

1、工具安装:自行下载Android Studio 2、制作.9png 注意上图3条黑线的位置,意思是:标注黑线的位置可以进行缩放。 对其大多数启动图来说,标注以上3条黑线即可。

java上机编程题面试,记一次美团Java研发岗的面试经历

第一篇:SpringBoot面试篇 1.1 35常见SpringBoot知识点 问题一:Spring Boot、Spring MVC 和 Spring 有什么区别? 问题二:什么是自动配置? 问题三:什么是 Spring Boot Stater ? 问题四&#x…

进销存是什么意思?如何开发一款进销存管理系统?

这篇给大家详细介绍一下,进销存到底是什么,进销存管理系统有什么用?企业如何开发一款进销存管理系统? 以下内容示例工具均来自于JDY——https://www.jiandaoyun.com 一、进销存是什么? 1、基本概念 进销存&#xff0…