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()

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

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

相关文章

VC++父进程交互式操作子进程标准输入输出

父进程接管子进程的标准输入输出和错误,实现对子进程的交互操作。比如子进程是一个类似mysql这种可以交互的命令,执行操作后输出结果,父进程根据结果分析决定执行下一步的命令,从而替代人工的输入。 通过父进程创建子进程,使用管道重定向子进程的输入输出错误可以实现 在 …

数据结构与算法——19.红黑树

这篇文章我们来讲一下红黑树。 目录 1.概述 1.1红黑树的性质 2.红黑树的实现 3.总结 1.概述 首先,我们来大致了解一下什么是红黑树 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。红黑树具有良好的效率,它可在 O(logN) 时间内完…

P1541 [NOIP2010 提高组] 乌龟棋

[NOIP2010 提高组] 乌龟棋 - 洛谷 #include<bits/stdc.h> using namespace std; const int N41; int f[N][N][N][N],num[351],g[5],n,m,x; int main() {scanf("%d %d",&n,&m);for(int i1;i<n;i)scanf("%d",&num[i]);f[0][0][0][0]nu…

解决u盘在我的电脑中重复显示两个

删除注册表&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders\{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}]

Maven下载源码出现:Cannot download sources Sources not found for org.springframwork...

Maven下载源码出现&#xff1a;Cannot download sources Sources not found for org.springframwork… 最近重装了IDEA再次查看源码时发现总是报错&#xff0c;网上找了很多&#xff0c;发现解决方法都是在项目终端执行如下命令&#xff1a; mvn dependency:resolve -Dclassi…

基于MFC和OpenCV实现人脸识别

基于MFC和OpenCV实现人脸识别 文章目录 基于MFC和OpenCV实现人脸识别1. 项目说明1. 创建项目2. 启动窗口3. 登录窗口-添加窗口、从启动窗口跳转4. 启动窗口-美化按钮5. 登录窗口-美化按钮、雪花视频6. 注册窗口-美化按钮、雪花视频、从启动窗口跳转7. 注册窗口-开启摄像头8. 注…

PE文件之导入表

1. 导入表 2. 显示导入表信息的例子 ; 作用: 将RVA地址转成FOA即文件偏移 ; 参数: _pFileHdr 指向读到内存中文件的基址指针 ; _dwRVA 目标RVA地址 ; 返回: 目标RVA转成文件偏移的值 RVA2FOA PROC USES esi edi edx, _pFileHdr:PTR BYTE, _dwRVA:DWORDmov esi, _pFil…

栈的应用场景(二)

有效的括号匹配 1.题目2.图分析3.代码实现 1.题目 2.图分析 3.代码实现 class Solution {public boolean isValid(String s) {//创建一个栈,来放左括号.Stack<Character> stack new Stack<>();//遍历字符串,左括号放进栈for(int i 0 ; i < s.length(); i){ch…

阿里云 Oss 权限控制

前言 最近公司的私有 Oss 服务满了&#xff0c;且 Oss 地址需要设置权限&#xff0c;只有当前系统的登录用户才能访问 Oss 下载地址。一开始想着用 Nginx 做个转发来着&#xff0c;Nginx 每当检测当前请求包含特定的 Oss 地址就转发到我们的统一鉴权接口上去&#xff0c;但是紧…

SpringCloudGateway实现数字签名与URL动态加密

文章目录 对称加密非对称加密什么是数字签名HTTPS与CA⭐Gateway网关的过滤器链如何对自己的路径传输设定一个数字签名&#xff1f;前端获取RSA公钥发送加密后对称密钥后端接收当前会话对称密钥并保存前端发送AES加密请求验证请求 如何实现URL的动态加密&#xff1f; 再网络传递…

基于Python3搭建qt开发环境

Python可视化编程相信大部分刚接触都是tkinter&#xff0c;tkinter是Python自带的库&#xff0c;不需要安装第三方库即可使用&#xff0c;在我的Python专栏中也有很多基于tkinter来设计的可视化界面。本篇文章将尝试另外一个Python的可视化编程库(pyqt)&#xff0c;与tkinter编…

深度学习 二:COVID 19 Cases Prediction (Regression)

Deep Learning 1. 回归算法思路2. 代码2.1 基础操作2.2 定义相关函数2.3.1 定义图像绘制函数2.3.2 数据集加载及预处理2.3.3 构造数据加载器2.3.4 构建前馈神经网络&#xff08;Feedforward Neural Network&#xff09;模型2.3.5 神经网络的训练过程2.3.6 模型评估2.3.7 模型测…

【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 3. 对面积的曲面积分(第一类曲面积分)

文章目录 二、曲面积分2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09;2.1.1 问题引入 —— 曲面的质量2.1.2 对面积的曲面积分定义及性质2.1.3 对面积的曲面积分的计算法 写在最后 二、曲面积分 2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09; 2…

springboot单体项目如何拆分成微服务

要将一个Spring Boot单体项目拆分成微服务&#xff0c;可以按照以下步骤进行操作&#xff1a; 识别业务域&#xff1a;首先&#xff0c;需要对单体项目进行业务域的划分。将项目中的功能按照业务领域进行分类&#xff0c;每个业务领域可以成为一个独立的微服务。 定义服务接口…

字符和字节的区别

字节 1.字节是计算机存储容量的基本单位(Byte)&#xff0c;除了字节以外还有“比特”&#xff08;b&#xff09;&#xff1b;千字节&#xff08;KB&#xff09;&#xff1b;兆字节&#xff08;MB&#xff09;等&#xff0c;他们之间的换算关系是&#xff1a;   1B8b&#xff…

YTM32的电源管理与低功耗系统详解

YTM32的电源管理与低功耗系统详解 苏勇&#xff0c;2023年10月 文章目录 YTM32的电源管理与低功耗系统详解缘起原理与机制电源管理模型的功耗模式正常模式&#xff08;Normal&#xff09;休眠模式&#xff08;Sleep&#xff09;深度休眠模式&#xff08;DeepSleep&#xff09;…

Flutter+SpringBoot实现ChatGPT流实输出

FlutterSpringBoot实现ChatGPT流式输出、上下文了连续对话 最终实现Flutter的流式输出上下文连续对话。 这里就是提供一个简单版的工具类和使用案例&#xff0c;此处页面仅参考。 服务端 这里直接封装提供工具类&#xff0c;修改自己的apiKey即可使用&#xff0c;支持连续…

Python使用词云图展示

网上看到一个txt文本信息&#xff0c;共2351条饭否记录&#xff0c;据说是微信之父每天发的饭否记录&#xff0c;其实我不知道什么是饭否。我读取这个文本内容&#xff0c;展示到词语图上。之前也使用过&#xff0c;但是好久没有玩Python了&#xff0c;称假期空闲&#xff0c;练…

Spring的注解开发-注解方式整合MyBatis代码实现

之前使用xml方式整合了MyBatis&#xff0c;文章导航&#xff1a;Spring整合第三方框架-MyBatis整合Spring实现-CSDN博客 现在使用注解的方式无非是就是将xml标签替换为注解&#xff0c;将xml配置文件替换为配置类而已。 非自定义配置类 package com.example.Configure;import c…

黑马头条项目环境搭建

注册中心网关配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://…