css怎么做网站横向菜单/百度seo排名优化如何

css怎么做网站横向菜单,百度seo排名优化如何,小公司做网站的好处,广安哪里做网站目录 前言 1 完整代码 2 代码解读 2.1 导入模块 2.2 定义 TaoBao 类 2.3 search_infor_price_from_web 方法 2.3.1 获取下载路径 2.3.2 设置浏览器选项 2.3.3 反爬虫处理 2.3.4 启动浏览器 2.3.5 修改浏览器属性 2.3.6 设置下载行为 2.3.7 打开淘宝登录页面 2.3.…

目录

前言

1 完整代码

2 代码解读

2.1 导入模块

2.2 定义 TaoBao 类

2.3 search_infor_price_from_web 方法

2.3.1 获取下载路径

2.3.2 设置浏览器选项

2.3.3 反爬虫处理

2.3.4 启动浏览器

2.3.5 修改浏览器属性

2.3.6 设置下载行为

2.3.7 打开淘宝登录页面

2.3.8 登录淘宝

2.3.9 搜索商品并提取信息

2.3.10 提取商品信息

3.11 保存数据到Excel

2.4 执行脚本

3 总结与思考


前言

Selenium作为主流的Web自动化测试框架,在数据采集领域也有广泛应用。本文将分享如何使用Selenium实现淘宝物资价格信息的爬取。目前代码还存在一些缺陷,主要体现在:1)未能有效绕过淘宝的反爬虫机制;2)登录环节仍需人工干预。欢迎大伙在评论区分享解决方案。

1 完整代码

import datetime
import os
import timeimport pandas as pd
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import Byclass TaoBao():# 下载每月出门单信息def search_infor_price_from_web(self, path_dir=os.path.abspath(r'.'), descr_list=['脱脂纱布', '机器人', '衬衫']):key1 = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', 0,win32con.KEY_READ)download_path = win32api.RegQueryValueEx(key1, 'Desktop')[0]download_path = os.path.join(os.path.dirname(download_path), 'Downloads')print(download_path)# FileProcess().remove_assign_excel_file_in_path(download_path, key)# 重新从网站下载调拨文件print('浏览器设置默认信息,如关闭下载保留提示!!!')start_x_1 = datetime.datetime.now()options = Options()prefs = {'download.prompt_for_download': False, 'download.default_directory': download_path}options.add_experimental_option("prefs", prefs)options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 这里去掉window.navigator.webdriver的特性options.add_argument("--disable-blink-features=AutomationControlled")options.add_argument('--force-device-scale-factor=1')options.add_argument('--start-maximized')  # 最大化窗口options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 禁用自动化栏options.add_experimental_option('useAutomationExtension',False)  # 禁用自动化栏的原理:将window.navigator.webdriver改为undefined。# 屏蔽密码提示框prefs = {'credentials_enable_service': False, 'profile.password_manager_enabled': False}options.add_experimental_option('prefs', prefs)# 反爬虫特征处理options.add_argument('--disable-blink-features=AutomationControlled')# options.add_argument("--headless")  # 无界面模式# options.add_argument("--disadle-gpu")  # 禁用显卡# driver = webdriver.Chrome(chrome_options=options)driver = webdriver.Chrome(options=options)# 修改了浏览器的内部属性,跳过了登录的滑动验证driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})# driver = webdriver.Chrome()driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')params = {'cmd': 'Page.setDownloadBehavior','params': {'behavior': 'allow', 'downloadPath': download_path}}driver.execute("send_command", params)print('浏览器将打开已经进入!!!')end_x_1 = datetime.datetime.now()print('花费%s时长进入浏览器!!!' % (end_x_1 - start_x_1))driver.maximize_window()  # 最大化谷歌浏览器driver.implicitly_wait(10)  # 隐性等待10s# driver.get('https://www.taobao.com')driver.get('https://login.taobao.com/member/login.jhtml')# 修改了浏览器的内部属性,跳过了登录的滑动验证driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})# 手机扫码登入# 尝试输入密码try:time.sleep(3)# 输入账号密码username = driver.find_element(By.ID, 'fm-login-id')# username.send_keys('jianfei.xu')username.send_keys('XXXXXX')time.sleep(10)password = driver.find_element(By.ID, 'fm-login-password')# password.send_keys('0000000.')password.send_keys('XXXXX')time.sleep(10)# 点击登入driver.find_element(By.XPATH,'/html/body/div/div[2]/div[3]/div/div/div/div[1]/div/form/div[6]/button').click()driver.implicitly_wait(10)  # 隐式等待10stime.sleep(5)except:passtime.sleep(60)print(123)data_list = []for search_str in descr_list:# 输入搜索框path = '/html/body/div[3]/div[2]/div[1]/div/div/div[3]/div/div[1]/form/div[4]/input'driver.find_element(By.XPATH, path).clear()driver.find_element(By.XPATH, path).send_keys(search_str)time.sleep(2)# 查询path = '/html/body/div[3]/div[2]/div[1]/div/div/div[3]/div/div[1]/form/div[2]/button'driver.find_element(By.XPATH, path).click()time.sleep(2)# 切换浏览器窗口handle = driver.window_handles  # 获取句柄,得到的是一个列表driver.switch_to.window(handle[-1])  # 切换至最新句柄time.sleep(10)try:path = '/html/body/div[3]/div[3]/div[1]/div[1]/div/div[2]/div[3]'text_str = driver.find_element(By.XPATH, path).textexcept:passtry:path = '/html/body/div[3]/div[3]/div/div[1]/div/div[3]'text_str = driver.find_element(By.XPATH, path).textexcept:pass'/html/body/div[3]/div[4]/div/div[1]/div/div[3]/div[3]/div/div[1]/a/div/div[1]/div[1]/img[1]''/html/body/div[3]/div[4]/div/div[1]/div/div[3]/div[3]/div/div[2]/a/div/div[1]/div[1]/img''/html/body/div[3]/div[4]/div/div[1]/div/div[3]/div[3]/div/div[3]/a/div/div[1]/div[1]/img''/html/body/div[3]/div[4]/div/div[1]/div/div[3]/div[3]/div/div[4]/a/div/div[1]/div[1]/img'# 对text_str进行数据提取print(text_str)data_dic = {}data_dic['物资'] = search_strtext_list = text_str.split('\n')print(text_list)ix = 1for i in range(len(text_list)):each_str = text_list[i]if each_str == '¥':print('>>>>>>>>>>>>>>>>>>>>')descr_picture_url = os.path.join(path_dir, text_list[i - 1] + '.webp')print(descr_picture_url)print(text_list[i - 1])  # 描述print(text_list[i])print(text_list[i + 1])  # 金额print(text_list[i + 3])  # 地点data_dic['对比%s-描述' % str(ix)] = text_list[i - 1]data_dic['对比%s-金额' % str(ix)] = text_list[i + 1]data_dic['对比%s-地点' % str(ix)] = text_list[i + 3]ix += 1data_list.append(data_dic)print('>>>>>>>>>>>>>>>>>>')print(text_str)# 关闭最新窗口# 跳转到新页面进行完一系列操作后driver.close()  # 关闭新开的页面time.sleep(2)driver.switch_to.window(driver.window_handles[0])  # 跳转首页df = pd.DataFrame(data_list)df.to_excel('temp123.xlsx')df = pd.DataFrame(data_list)df.to_excel('temp123.xlsx')return df# 类引用
TaoBao().search_infor_price_from_web()

这段代码是一个使用Selenium自动化工具从淘宝网站上抓取商品信息的Python脚本。代码的主要功能是通过模拟浏览器操作,登录淘宝,搜索指定商品,并提取商品的价格、描述和地点等信息,最后将这些信息保存到Excel文件中。以下是对上述代码的详细解读

2 代码解读

2.1 导入模块

import datetime
import os
import time
import pandas as pd
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
  • datetimeostime:用于处理日期、时间和文件路径。

  • pandas:用于数据处理和保存到Excel文件。

  • win32apiwin32con:用于访问Windows注册表,获取下载路径。

  • selenium:用于自动化浏览器操作,模拟用户行为。

2.2 定义 TaoBao 类

class TaoBao():
  • 这个类封装了从淘宝网站抓取商品信息的功能。

2.3 search_infor_price_from_web 方法

def search_infor_price_from_web(self, path_dir=os.path.abspath(r'.'), descr_list=['脱脂纱布', '机器人', '衬衫']):
  • 这是类中的主要方法,用于从淘宝网站抓取商品信息。

  • path_dir:指定保存文件的路径,默认为当前目录。

  • descr_list:要搜索的商品列表,默认为 ['脱脂纱布', '机器人', '衬衫']

2.3.1 获取下载路径

key1 = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', 0,win32con.KEY_READ)
download_path = win32api.RegQueryValueEx(key1, 'Desktop')[0]
download_path = os.path.join(os.path.dirname(download_path), 'Downloads')
print(download_path)
  • 通过访问Windows注册表,获取用户的桌面路径,并将其修改为下载路径(Downloads文件夹)。

2.3.2 设置浏览器选项

options = Options()
prefs = {'download.prompt_for_download': False, 'download.default_directory': download_path}
options.add_experimental_option("prefs", prefs)
  • 设置Chrome浏览器的下载选项,禁用下载提示,并指定下载路径。

2.3.3 反爬虫处理

options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 去掉window.navigator.webdriver的特性
options.add_argument("--disable-blink-features=AutomationControlled")
  • 通过修改浏览器选项,避免被网站识别为自动化脚本。

2.3.4 启动浏览器

driver = webdriver.Chrome(options=options)
  • 启动Chrome浏览器,应用之前设置的选项。

2.3.5 修改浏览器属性

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
  • 通过执行Chrome DevTools Protocol命令,修改浏览器的navigator.webdriver属性,避免被检测为自动化工具。

2.3.6 设置下载行为

driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior','params': {'behavior': 'allow', 'downloadPath': download_path}}
driver.execute("send_command", params)
  • 设置浏览器的下载行为,允许下载并指定下载路径。

2.3.7 打开淘宝登录页面

driver.get('https://login.taobao.com/member/login.jhtml')
  • 打开淘宝的登录页面。

2.3.8 登录淘宝

username = driver.find_element(By.ID, 'fm-login-id')
username.send_keys('XXXXX')
password = driver.find_element(By.ID, 'fm-login-password')
password.send_keys('XXXXX')
driver.find_element(By.XPATH, '/html/body/div/div[2]/div[3]/div/div/div/div[1]/div/form/div[6]/button').click()
  • 通过输入用户名和密码,点击登录按钮,完成登录操作。

2.3.9 搜索商品并提取信息

for search_str in descr_list:driver.find_element(By.XPATH, path).clear()driver.find_element(By.XPATH, path).send_keys(search_str)driver.find_element(By.XPATH, path).click()
  • 遍历descr_list中的每个商品名称,输入搜索框并点击搜索按钮。

2.3.10 提取商品信息

text_str = driver.find_element(By.XPATH, path).text
text_list = text_str.split('\n')
  • 从搜索结果页面中提取商品信息,并将其拆分为列表。

3.11 保存数据到Excel

df = pd.DataFrame(data_list)
df.to_excel('temp123.xlsx')
  • 将提取的商品信息保存到Excel文件中。

2.4 执行脚本

TaoBao().search_infor_price_from_web()
  • 创建TaoBao类的实例,并调用search_infor_price_from_web方法,执行整个抓取过程。

3 总结与思考

这段代码通过Selenium模拟浏览器操作,实现了从淘宝网站抓取商品信息的功能。代码中使用了多种反爬虫技术,避免被网站检测为自动化脚本。最终,抓取到的商品信息被保存到Excel文件中,便于后续分析和处理。

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

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

相关文章

蓝桥杯题型

蓝桥杯 蓝桥杯题型分类语法基础艺术与篮球(日期问题)时间显示(时间问题)跑步计划(日期问题)偶串(字符)最长子序列(字符)字母数(进制转换)6个0&…

Spring Boot框架总结(超级详细)

前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置&#…

AI开发利器:miniforge3无感平替Anaconda3

相信有和我遭遇一样的同学吧,之前装了anaconda用的挺好的(可以参考AI开发利器:Anaconda),但是考虑到有可能收到软件侵权的律师函的风险,还是果断找个替代品把anaconda卸载掉。miniforge就是在这样的背景下发…

用 Vue 3.5 TypeScript 做了一个日期选择器(改进版)

上一篇 已经实现了一个日期选择器&#xff0c;只不过是模态窗的形式&#xff0c;这个版本改为文本框弹出&#xff0c;点击空白处可关闭日历 代码也增加了不少 <template><div><!-- 添加文本框 --><div class"date-picker-input-wrapper">&l…

【爬虫】开篇词

一、网络爬虫概述 二、网络爬虫的应用场景 三、爬虫的痛点 四、需要掌握哪些技术&#xff1f; 在这个信息爆炸的时代&#xff0c;如何高效地获取和处理海量数据成为一项核心技能。无论是数据分析、商业情报、学术研究&#xff0c;还是人工智能训练&#xff0c;网络爬虫&…

文字转语音chat-tts-ui

去年已经使用过chattts了&#xff0c;但是昨晚想用的时候却记怎么打开了&#xff0c;找了一下以前的笔记 MacOS 下源码部署chat-tts-ui 配置好 python3.9-3.11 环境,安装git &#xff0c;执行命令 brew install libsndfile git python3.10 继续执行 brew install ffmpeg ​ …

基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】

基于SpringBootVue的瑜伽课体验课预约系统 一、系统技术说明二、运行说明三、系统的演示四、系统的核心代码演示 一、系统技术说明 框架&#xff1a;SpringbootVue 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软…

sparkTTS window 安装

SparkTTS 的简介 Spark-TTS是一种基于SpardAudio团队提出的 BiCodec 构建的新系统&#xff0c;BiCodec 是一种单流语音编解码器&#xff0c;可将语音策略性地分解为两种互补的标记类型&#xff1a;用于语言内容的低比特率语义标记和用于说话者特定属性的固定长度全局标记。这种…

ApoorvCTF Rust语言逆向实战

上周参加了国外的比赛&#xff0c;名称叫&#xff1a;ApoorvCTF 看一下老外的比赛跟我们有什么不同&#xff0c;然后我根据国内比赛对比发现&#xff0c;他们考点还是很有意思的&#xff0c;反正都是逆向&#xff0c;哈哈哈 Rusty Vault 题目描述&#xff1a; In the heart…

Git和GitHub基础教学

文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…

MySQL中like模糊查询如何优化?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中&#xff0c;LIKE 模糊查询虽然非常常见&#xff0c;…

⭐LeetCode(数学分类) 2. 两数相加——暴力与优化⭐

⭐LeetCode(数学分类) 2. 两数相加——暴力与优化⭐ 提示&#xff1a; 每个链表中的节点数在范围 [1, 100] 内 0 < Node.val < 9 题目数据保证列表表示的数字不含前导零 题解&#xff1a; 暴力与优化&#xff0c;暴力即转换为十进制解题&#xff0c;优化即直接在链表上进…

①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信单元 MODBUS TCP 转 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作为MODBUS TCP通信的服务器进行动作。可通…

C/C++蓝桥杯算法真题打卡(Day3)

一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…

C语言八股---预处理,编译,汇编与链接篇

前言 从多个.c文件到达一个可执行文件的四步:   预处理–>编译–>汇编–>链接 预处理 预处理过程就是预处理器处理这些预处理指令(要不然编译器完全不认识),最终会生成 main.i的文件 主要做的事情有如下几点: 展开头文件展开宏条件编译删除注释添加行号等信息保留…

用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏

大家好&#xff01;今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括&#xff1a;控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂&#xff0c;适合初学者学习和实践。 游戏功能概述 玩家控制&#xff1a;使用键…

面向高质量视频生成的扩散模型方法-算法、架构与实现【附核心代码】

目录 算法原理 架构 代码示例 算法原理 正向扩散过程&#xff1a;从真实的视频数据开始&#xff0c;逐步向其中添加噪声&#xff0c;随着时间步 t 的增加&#xff0c;噪声添加得越来越多&#xff0c;最终将原始视频数据变成纯噪声。数学上&#xff0c;t 时刻的视频数据与 t…

游戏引擎学习第149天

今日回顾与计划 在今天的直播中&#xff0c;我们将继续进行游戏的开发工作&#xff0c;目标是完成资产文件&#xff08;pack file&#xff09;的测试版本。目前&#xff0c;游戏的资源&#xff08;如位图和声音文件&#xff09;是直接从磁盘加载的&#xff0c;而我们正在将其转…

ForceMimic:以力为中心的模仿学习,采用力运动捕捉系统进行接触丰富的操作

25年3月来自上海交大卢策吾教授团队的论文“ForceMimic: Force-Centric Imitation Learning with Force-Motion Capture System for Contact-Rich Manipulation”。 在大多数接触丰富的操作任务中&#xff0c;人类会将随时间变化的力施加到目标物体上&#xff0c;以补偿视觉引…