当前位置: 首页 > news >正文

selenium京东商城爬取

 该项目主要参考与:http://c.biancheng.net/python_spider/selenium-case.html

你看完上述项目内容之后,会发现京东登录是一个比较坑的点,selenium控制浏览器没有登录京东,导致我们自动爬取网页被重定向到京东登录注册页面。

因此,我们要单独能一个登录注册。

但是,发现京东的验证功能 -- 滑动图片/发送验证码到手机目前我没办法解决,因此我们可以手动验证:我们启动浏览器,自己手动验证完之后,跳转到京东首页

1. 登录功能

# 登录def login_html(self, loginname, password):self.browser.get(url=self.url)# 进入登录页面self.browser.find_element(by=By.LINK_TEXT, value='你好,请登录').click()time.sleep(2)# 选择账户登录方式self.browser.find_element(by=By.LINK_TEXT, value='账户登录').click()# 输入框输入账号和密码self.browser.find_element(value='loginname').send_keys(loginname)self.browser.find_element(value='nloginpwd').send_keys(password)time.sleep(2)# 登录self.browser.find_element(value='loginsubmit').click()# 登录成功会跳转到京东首页,并且没有请登录字段。# 延长30s,自己手工验证;30s,之内没验证,自动断开start_time = time.time()while True:condition = (self.browser.page_source.find('你好,请登录') == -1) and (self.browser.current_url == 'https://www.jd.com/')# 如果登录成功,跳出循环if condition:return Truetime1 = int(time.time() - start_time)# 60s没验证成功,直接终止selenium进程if time1 >= 60:self.browser.quit()return False

2.完整代码 

from selenium import webdriver
import time
from selenium.webdriver.common.by import Byclass JdSpider(object):def __init__(self):self.url = 'https://www.jd.com/'self.browser = webdriver.Chrome()  # 创建无界面参数的浏览器对象self.i = 0  # 计数,一共有多少件商品# 输入地址+输入商品+点击按钮,切记这里元素节点是京东首页的输入栏、搜索按钮def get_html(self):self.browser.find_element(by=By.XPATH, value='//*[@id="key"]').send_keys('python书籍')self.browser.find_element(by=By.XPATH, value="//*[@class='form']/button").click()# 登录def login_html(self, loginname, password):self.browser.get(url=self.url)# 进入登录页面self.browser.find_element(by=By.LINK_TEXT, value='你好,请登录').click()time.sleep(2)# 选择账户登录方式self.browser.find_element(by=By.LINK_TEXT, value='账户登录').click()# 输入框输入账号和密码self.browser.find_element(value='loginname').send_keys(loginname)self.browser.find_element(value='nloginpwd').send_keys(password)time.sleep(2)# 登录self.browser.find_element(value='loginsubmit').click()# 登录成功会跳转到京东首页,并且没有请登录字段。# 延长30s,自己手工验证;30s,之内没验证,自动断开start_time = time.time()while True:condition = (self.browser.page_source.find('你好,请登录') == -1) and (self.browser.current_url == 'https://www.jd.com/')# 如果登录成功,跳出循环if condition:return Truetime1 = int(time.time() - start_time)# 60s没验证成功,直接终止selenium进程if time1 >= 60:self.browser.quit()return Falsedef get_data(self):# 执行js语句,拉动进度条件, 把进度条件拉倒最底部+提取商品信息self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')# 给页面元素加载时预留时间time.sleep(2)# 用 xpath 提取每页中所有商品,最终形成一个大列表li_list = self.browser.find_elements(by=By.XPATH, value='//*[@id="J_goodsList"]/ul/li')for li in li_list:# 构建空字典item = {}item['name'] = li.find_element(by=By.XPATH, value='.//div[@class="p-name"]/a/em').text.strip()item['price'] = li.find_element(by=By.XPATH, value='.//div[@class="p-price"]').text.strip()item['count'] = li.find_element(by=By.XPATH, value='.//div[@class="p-commit"]/strong').text.strip()item['shop'] = li.find_element(by=By.XPATH, value='.//div[@class="p-shopnum"]').text.strip()print(item)self.i += 1def run(self):is_login =  self.login_html(loginname, password)# 如果登录失败直接终结函数if not is_login :returnself.get_html()# 循环执行点击“下一页”操作while True:# 获取每一页要抓取的数据self.get_data()# 判断是否是最一页if self.browser.page_source.find('pn-next disabled') == -1:self.browser.find_element(by=By.CLASS_NAME, value='pn-next').click()# 预留元素加载时间time.sleep(1)else:print('数量', self.i)breaktime.sleep(3)self.browser.quit()if __name__ == '__main__':loginname = '用户名'password = '密码'spider = JdSpider()spider.run()

相关文章:

selenium京东商城爬取

该项目主要参考与:http://c.biancheng.net/python_spider/selenium-case.html 你看完上述项目内容之后,会发现京东登录是一个比较坑的点,selenium控制浏览器没有登录京东,导致我们自动爬取网页被重定向到京东登录注册页面。 因此,我们要单独…...

用pandas处理数据时,使变量能够在不同的Notebook会话页面进行传递,魔法命令%store

【需求来源】 在使用pandas时,有的时候我想将.ipynb文件分开写 其中一个写清洗数据代码另外一个写数据可视化代码 【解决方案】 但是会涉及到变量转移问题,这个时候我通常使用的方法是: 1、在清洗完数据后导出到本地 2、在文件后面增加当…...

选择适合户外篷房企业的企业云盘解决方案

“户外篷房企业用什么企业云盘好?Zoho WorkDrive企业网盘可以帮助户外篷房企业实现文档统一管理、提高工作效率、加强团队协作,并且支持各种文件类型的预览和编辑。” S公司是一家注重管理规范的大型户外篷房企业,已经有10余年的经验。作为设…...

松鼠搜索算法(SSA)(含MATLAB代码)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…...

折半+dp之限制转状态+状压:CF1767E

https://vjudge.net/problem/CodeForces-1767E/origin 首先40,必然折半。然后怎么做? 分析性质。每次可以走1步or2步,等价什么?等价任意相邻2个必选一个!然后就可以建图 这个图是个限制图,我们折半后可以…...

如何写出优质代码

(本文转载自其他博主但是个人忘记了出处) 优质代码是什么? 优质代码是指那些易于理解、易于维护、可读性强、结构清晰、没有冗余、运行效率高、可复用性强、稳定性好、可扩展性强的代码。 这类代码不仅能够准确执行预期功能,同时也便于其他开发者理解…...

ChatGLM2-6B的通透解析:从FlashAttention、Multi-Query Attention到GLM2的微调、源码解读

前言 本文最初和第一代ChatGLM-6B的内容汇总在一块,但为了阐述清楚FlashAttention、Multi-Query Attention等相关的原理,以及GLM2的微调、源码解读等内容,导致之前那篇文章越写越长,故特把ChatGLM2相关的内容独立抽取出来成本文 …...

3D人脸生成的论文

一、TECA 1、论文信息 2、开源情况:comming soon TECA: Text-Guided Generation and Editing of Compositional 3D AvatarsGiven a text description, our method produces a compositional 3D avatar consisting of a mesh-based face and body and NeRF-based ha…...

解决问题:可以用什么方式实现自动化部署

自动化部署可以使用多种工具来实现: 脚本编写:可以使用 Bash、Python 等编写脚本来实现自动化部署。例如,可以使用 Bash 脚本来自动安装、配置和启动应用程序。 配置管理工具:像 Ansible、Puppet、Chef、Salt 等配置管理工具可以…...

【数据结构】链表栈

目录: 链表栈 1. 链式栈的实现2. 链表栈的创建3. 压栈4. 弹栈 链表栈 栈的主要表示方式有两种,一种是顺序表示,另一种是链式表示。本文主要介绍链式表示的栈。 链栈实际上和单链表差别不大,唯一区别就在于只需要对链表限定从头…...

Android笔记:Android 组件化方案探索与思考

组件化项目,通过gradle脚本,实现module在编译期隔离,运行期按需加载,实现组件间解耦,高效单独调试。 先来一张效果图 组件化初衷 APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂…...

MeterSphere v2.10.X-lts 双节点HA部署方案

一、MeterSphere高可用部署架构及服务器配置 1.1 服务器信息 序号应用名称操作系统要求配置要求描述1负载均衡器CentOS 7.X /RedHat 7.X2C,4G,200GB部署Nginx,实现负载路由。 部署NFS服务器。2MeterSphere应用节点1CentOS 7.X /RedHat 7.X8C,16GB,200G…...

Java进阶篇--网络编程

​​​​​​​ 目录 计算机网络体系结构 什么是网络协议? 为什么要对网络协议分层? 网络通信协议 TCP/IP 协议族 应用层 运输层 网络层 数据链路层 物理层 TCP/IP 协议族 TCP的三次握手四次挥手 TCP报文的头部结构 三次握手 四次挥手 …...

PyTorch入门之【CNN】

参考:https://www.bilibili.com/video/BV1114y1d79e/?spm_id_from333.999.0.0&vd_source98d31d5c9db8c0021988f2c2c25a9620 书接上回的MLP故本章就不详细解释了 目录 traintest train import torch from torchvision.transforms import ToTensor from torchvi…...

马斯洛需求层次模型之安全需求之云安全浅谈

在互联网云服务领域,安全需求是用户首要考虑的因素之一。用户希望在将数据和信息托付给云服务提供商时,这些数据和信息能够得到充分的保护,避免遭受未经授权的访问、泄露或破坏。这种安全需求的满足,对于用户来说是至关重要的&…...

Pikachu靶场——远程命令执行漏洞(RCE)

文章目录 1. RCE1.1 exec "ping"1.1.1 源代码分析1.1.2 漏洞防御 1.2 exec "eval"1.2.1 源代码分析1.2.2 漏洞防御 1.3 RCE 漏洞防御 1. RCE RCE(remote command/code execute)概述: RCE漏洞,可以让攻击者直接向后台服务器远程注入…...

【WSN】无线传感器网络 X-Y 坐标到图形视图和位字符串前缀嵌入方法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Linux定时任务

文章目录 前言设置定时任务流程定时规则例子 终止定时任务列出当前的定时任务重启任务调度 前言 在Linux系统中有时侯需要周期性的自动执行一些命令,这时候Linux定时任务就派上用场了 设置定时任务流程 进入定时任务的编辑模式 crontab -e编辑定时任务&#xff…...

【Overload游戏引擎分析】画场景网格的Shader

Overload引擎地址: GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后,场景视图中有栅格线,这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现&#xff0…...

【JavaEE】多线程进阶(一)饿汉模式和懒汉模式

多线程进阶(一) 文章目录 多线程进阶(一)单例模式饿汉模式懒汉模式 本篇主要引入多线程进阶的单例模式,为后面的大冰山做铺垫 代码案例介绍 单例模式 非常经典的设计模式 啥是设计模式 设计模式好比象棋中的 “棋谱”…...

C++树详解

树 树的定义 树(Tree)是n(n≥0)个结点的有限集。n0时称为空树。在任意一颗非空树中:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m&#xff08…...

支付环境安全漏洞介绍

1、平台支付逻辑全流程分析 2、平台支付漏洞如何利用?买东西还送钱? 3、BURP抓包分析修改支付金额,伪造交易状态? 4、修改购物车参数实现底价购买商品 5、SRC、CTF、HW项目月入10W副业之路 6、如何构建最适合自己的网安学习路线 1…...

抄写Linux源码(Day16:内存管理)

回忆我们需要做的事情: 为了支持 shell 程序的执行,我们需要提供: 1.缺页中断(不理解为什么要这个东西,只是闪客说需要,后边再说) 2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的,所以需要这两个东…...

Cookie和Session详解以及结合生成登录效果

目录 引言 1.Cookie中的数据从哪来数据长啥样? 2.Cookie有什么作用? 3.cookie与session的工作关联? 4.Cookie到哪去? 5.Cookie如何存? 6.Session 7.Cookie与Session的关联与区别 8.通过代码理解 8.1 相关代码 8.2…...

Spring基础以及核心概念(IoC和DIQ)

1.Spring是什么 Spring是包含了众多工具方法的IoC容器 2.loC(Inversion of Control )是什么 IoC:控制反转,Spring是一个控制反转容器(控制反转对象的生命周期) Spring是一个loC容器,我们之前学过的List/Map就是数据存储的容器,to…...

《C和指针》笔记32:多维数组初始化

文章目录 使用括号进行初始化初始化省略维度 使用括号进行初始化 我们可以给数组赋值一个长长的列表: int matrix[2][3] { 100, 101, 102, 110, 111, 112 };它等价于 matrix[0][0]100; matrix[0][1]101; matrix[0][2]102; matrix[1][0]110; matrix[1][1]111; ma…...

零食食品经营小程序商城的作用是什么

零食几乎可以涵盖每个年龄阶段,同时又是市场中常见的零售批发商品,在多个场景中都有销售/购买属性,对消费者来说,购买零食的渠道多种多样,无论线下还是线上,都可随心而购。 庞大市场升级促进下&#xff0c…...

Java泛型--什么是泛型?

https://www.bilibili.com/video/BV1xJ411n77R?p5&vd_sourcebb1fced25254581cf052adea5e87a1ff 1.泛型类、接口 1.1.泛型类 泛型类的定义 class 类名称 <泛型标识, 泛型标识, ...> {private 泛型标识 变量名;...... }常用的泛型标识&#xff1a;T、E、K、V jav…...

LabVIEW工业虚拟仪器的标准化实施

LabVIEW工业虚拟仪器的标准化实施 创建计算机化的测试和测量系统&#xff0c;从计算机桌面控制外部测量硬件设备&#xff0c;以及在计算机屏幕上显示的类似仪器的面板上查看来自外部设备的测试或测量数据&#xff0c;所有这些都需要虚拟仪器系统软件。该软件允许用户执行所有这…...

JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域

文章目录 前言 1&#xff1a;什么叫作用域 一&#xff1a;全局作用域 1&#xff1a;全局变量的声明 2&#xff1a;变量声明和使用的顺序 3&#xff1a;方法声明和使用的顺序 前言 1&#xff1a;什么叫作用域 可以起作用的范围 function fun(){var a 1; } fun();consol…...