获取淘宝价格区间l-r的商品a的详细信息(商品名等)

news2024/11/17 19:33:29

看了一眼,上次更新距今2个月,看起来我好咕咕啊(感叹),可是感觉这两个月也没闲着捏(比赛,cf,期末等等,幸亏期末考延期了,我这被期末作业都整死了快),只是懒得更博客而言(逃跑),本来打算把整理完的spss小测知识点发上来,但是操作部分没整理,就爬了(而且懒得截图)

不更题解大概是因为那段时间和学弟一起刷题,回答问题当作写题解了。

and明明已经在家一个月了,ip地址还在广东哈哈哈哈,侧面证明我是老鸽子。

别问比赛,问就是翻车。

感觉接下来能更新的东西也挺多的,再说吧(准备面实习了)。


这是本学期数据挖掘的期末大作业,作业要求上写不允许全程抄网上或其他同学的代码,以防误伤到我自己,先叠一层buff,截个图证明一下自己(防止有异议,发布博客之后就不改了)

第二层buff:文章的标题没有写很得详细(如果有幸被同学刷到那跟我没关啊)

第三层buff:会省略一些细节类的东西,大家加油!(不过我觉得应该没啥人会选这个题目,因为后面两个可以直接在上次小测的代码改,比这轻松多了,话说回来要是没事干我也可以把后面两个写了23333)


回归正题,这个大作业的要求是“淘宝(https://www.taobao.com/)上搜索a,价格区间l-r,抓取前k页的商品名、商品链接、价格、付款人数、商家名、商家链接总共6项信息(输出为excel文件)

第一个要求,在淘宝上搜索a物品,并遍历前k页。按理来说,这种事情可以直接通过找链接的规律来进行,不过老师要求了用selenium来处理,那就用吧

不过有一个问题是:淘宝搜索需要登陆,而selenium生成的浏览器可是啥都没有滴。

我这里使用了调用本地的登陆信息来处理

selenium的精髓就在于找到元素位置,直接模拟

具体的看注释(QAQ我老想打成//,老acmer了)

option = webdriver.ChromeOptions()#实例化谷歌设置选项
option.add_argument(r"user-data-dir=C:\Users\xxx\AppData\Local\Google\Chrome\User Data")#本地的chrome登陆信息,添加保持登录的数据路径
driver = webdriver.Chrome(options=option)#初始化driver
driver.get("https://www.taobao.com/")#打开淘宝
driver.find_element(By.XPATH, '//*[@id="q"]').clear()#清除
driver.find_element(By.XPATH, '//*[@id="q"]').send_keys("a")#输入a
driver.find_element(By.XPATH, '//*[@id="J_TSearchForm"]/div[1]/button').click()#点击搜索

下一步,我们要设置价格区间

driver.find_element(By.XPATH, '//*[@id="J_relative"]/div[1]/div/div[1]/div[1]/div/ul/li[1]/input').send_keys("l")#最小价格
driver.find_element(By.XPATH, '//*[@id="J_relative"]/div[1]/div/div[1]/div[1]/div/ul/li[3]/input').send_keys("r")#最大价格
driver.find_element(By.XPATH, '//*[@id="J_relative"]/div[1]/div/div[1]/div[1]/div/ul/li[4]/button').click()#点击确认

接下来,就是要枚举每一页,因为如果翻页的话中间出bug了后面就无了,所以还是用输入页码的方式比较保险

更保险的方法应该是写个try跳过bug,但我懒,就不写了

啊,注释太详细搞得我现在没话说,想整活

插播一段小故事:这两天在写作业(不止这门),我妈疑惑的问我:你在写专业作业还是写辅修的?我:专业课作业QAQ

谁能想到一个文科生天天在写代码捏

for i in range(1,k+1):#页码
    driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/input').clear()
    driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/input').send_keys("{}".format(i))#输入页码
    driver.find_element(By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]/span[3]').click()#点击确认
    print("正在爬取第{}页".format(i))

接下来,我们已经到了我们要的页面,那么我们就该找找我们需要的这些信息的位置啦(顺带一提,我的python码风神似c++,改不了啦)

这里辨析一下find_elements和find_element这两个函数,由于我前面设置本地登陆信息的时候得更新到最新版,所以find_elements_by_xpath这种就不能用了。然后没加s的返回第一个符合条件的元素,加了s的返回所有符合条件的元素的集合

    list=driver.find_elements(By.XPATH, '//*[@class="price g_price g_price-highlight"]/strong')
    for j in list:
        list_price.append(j.text)
    #//*[@class="deal-cnt"] 人数
    list=driver.find_elements(By.XPATH, '//*[@class="deal-cnt"]')
    for j in list:
        list_number.append(j.text)
    #//*[@class="row row-2 title"] 商品名
    list=driver.find_elements(By.XPATH, '//*[@class="row row-2 title"]')
    for j in list:
        list_goods.append(j.text)
    #//*[@class="row row-2 title"] 链接
    list=driver.find_elements(By.XPATH, '//*[@class="row row-2 title"]/a')
    for j in list:
        a = j.get_attribute('href')
        list_goods_link.append(a)
    #//*[@class="shop"]/a/span[2] 店名
    list=driver.find_elements(By.XPATH, '//*[@class="shop"]/a/span[2]')
    for j in list:
        list_shop.append(j.text)
    #//*[@class="shop"]/a 链接
    list=driver.find_elements(By.XPATH, '//*[@class="shop"]/a')
    for j in list:
        a = j.get_attribute('href')
        list_shop_link.append(a)

说到集合,因为每个页面的每种信息都是以集合的形式存在,我就维护了一个大的集合,每个集合是表格中的一列,最后出结果的时候直接用pandas来输出excel

list_goods=[]#商品名
list_goods_link=[]#商品链接
list_price=[]#价格
list_number=[]#付款人数
list_shop=[]#商品名
list_shop_link=[]#商家链接
data = {"商品名":list_goods,"商品链接":list_goods_link,"价格":list_price,"付款人数":list_number,"商家名":list_shop,"商家链接":list_shop_link}
df = pd.DataFrame(data)
df.to_excel('new.xlsx')

好啦,结束啦,睡觉

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

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

相关文章

SpringBoot+Vue项目艺术摄影预约系统设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

Python pandas有几千个库函数,你用过几个?(2)

上一篇链接: Python pandas有几千个库函数,你用过几个?(1)_Hann Yang的博客-CSDN博客 I~Q: Function10~25 Types[Function][9:25] [infer_freq, interval_range, isna, isnull, json_normalize, lreshap…

微信HOOK 协议接口 实战开发篇 1.登录

使用HOOK也有不短的时间,写的各类接口杂乱无章 于是便有了将所有接口重构,整理一下的想法 顺手将整理的要点作为日志记录下来 预计每类接口写一篇日志,本次使用的是2022.12.24,当前微信最新版3.8.1.26版 言归正传,开始…

【秋招总结】双非本小菜鸡的坎坷秋招之路(附面经)

前言 因为大环境的影响,今年秋招hc骤缩,导致竞争的激烈程度比往年高了不少。 在秋招的时候,经历过简历石沉大海的无奈,也体验过人家收割offer而自己却依旧0offer的焦虑,不过好在最终也拿到了还算满意的结果。 如今我…

python爬虫把数据保存到csv、mysql中

啧,放假几天游戏玩腻了,啥都不想干,突然想起来python这玩意,无聊就来玩玩 目录 先是保存csv里面 然后保存到mysql里 目标:起点 主要是拿到这几个数据 分析下网页 一个li对应一本小说,打开li看里面的东西 …

Android ViewPager2 实现阅读器横向翻页效果(三)--- 实时动态分页及章节切换效果的原理及实现

文章目录Android ViewPager2 实现阅读器横向翻页效果(三)--- 实时动态分页及章节切换效果的原理及实现关键概念引入初始数据准备ViewPager Adapter 动态分页 及 第一次分页分页后更新窗口 及 首页尾页的特殊处理翻页状态监听 及 动态章节切换Android Vie…

BIT.4 Linux进程控制

目录进程创建fork函数初识写实拷贝fork常规用法fork调用失败的原因补充知识进程终止进程退出场景进程常见退出方法exit函数与_exit函数return 退出补充知识进程等待进程等待必要性进程等待的方法wait方法waitpid方法wait / waitpid 阻塞代码WIFEXITEDwait / waitpid 非阻塞代码…

LeetCode刷题复盘笔记—一文搞懂动态规划之718. 最长重复子数组问题(动态规划系列第三十一篇)

今日主要总结一下动态规划的一道题目,718. 最长重复子数组 题目:718. 最长重复子数组 Leetcode题目地址 题目描述: 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1: …

华熙LIVE·五棵松商业北区明年国庆亮相 互动体验升级

京城着名的活力聚集地——华熙LIVE五棵松明年将增添两万多平米商业区,新增商业区位于现有商业区北侧并与之相连通,业态在承袭现有沉浸式互动体验业态基础上,将引进元宇宙等前沿科技和跳楼机等娱乐设施,使互动体验进一步升级。项目…

一文搞懂Linux内核中断机制原理与实现

为什么需要中断? 如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,因为外设的处理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核,会是一个聪明的方式&a…

JWT渗透与攻防(一)

目录 前言 JWT漏洞介绍 案列演示之Leaky_JWT JWT漏洞具体的实现方式: 案列演示之JWT None Algorithm JWT漏洞工具的利用 JWT利用工具介绍 jwt_tool 漏洞利用 jwt-cracker c-jwt-cracker 前言 Json web token (JWT)相关漏洞对于渗透测试人员而言可能是一种…

node.js+uni计算机毕设项目店内点餐微信小程序LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

【Pandas入门教程】如何从现有列派生新列

如何从现有列派生新列 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何从现有列派生新列导包数据集准备【1】如…

C++——STL之stack和queue详解

C——STL之stack和queue详解🏐什么是stack和queue🏐stack和queue的实现🏀什么是deque🏀stack的模拟实现🏀queue的模拟实现🏐优先级队列(priority_queue)🏀优先级队列的实现⚽push⚽p…

Spring Authorization Server1.0 介绍与使用

一、版本使用 1、Java&#xff1a;17或者更高的版本。 2、springboot 3.0 3、Spring Authorization Server 1.0版本。 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-authorization-server</ar…

使用proxy_pool来为爬虫程序自动更换代理IP

文章目录1. 前言2. 教程3. 官网4. 在线demo4.1. 本地部署4.2. 安装4.2.1. Python源码构建安装4.2.1.1. 安装redis数据库4.2.1.1.1. 下载redis源码4.2.1.1.2. 启动redis服务4.2.1.1.3. 安装redis服务4.2.1.1.4. 再次通过命令启动redis服务4.2.1.1.5. 测试redis服务是否可用4.2.1…

node.js+uni计算机毕设项目基于微信小程序的车位共享系统LWPPT(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

C语言程序设计--银行管理系统

主界面 登入界面 #include <stdio.h> #include <malloc.h> #include <conio.h> #include <time.h> #include <windows.h> #define MB_ICONINFORMATION MB_ICONASTERISK //对 错误 struct account_information /…

腾讯云轻量应用服务器使用Matomo 应用镜像搭建网站流量统计系统!

Matomo 是一款开源的网站数据统计软件&#xff0c;可以用于跟踪、分析您的网站的流量&#xff0c;同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统&#xff0c;已预置 Nginx、MariaDB、PHP 软件。本文介绍如何使用 Matomo 快速搭建您的网站流量统计系统。…

【文本检测】2、DBNet++ | 为 DBNet 引入多级特征图聚合模块 ASF

文章目录一、背景二、方法2.1 Adaptive Scale Fusion (ASF) 模块2.2 Binarization2.3 Adaptive Threshold2.4 Deformable Convolution2.5 Label Generation2.6 Optimization三、效果论文&#xff1a;Real-Time Scene Text Detection with Differentiable Binarization and Adap…