当前位置: 首页 > 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()

http://www.lryc.cn/news/183656.html

相关文章:

  • 用pandas处理数据时,使变量能够在不同的Notebook会话页面进行传递,魔法命令%store
  • 选择适合户外篷房企业的企业云盘解决方案
  • 松鼠搜索算法(SSA)(含MATLAB代码)
  • 折半+dp之限制转状态+状压:CF1767E
  • 如何写出优质代码
  • ChatGLM2-6B的通透解析:从FlashAttention、Multi-Query Attention到GLM2的微调、源码解读
  • 3D人脸生成的论文
  • 解决问题:可以用什么方式实现自动化部署
  • 【数据结构】链表栈
  • Android笔记:Android 组件化方案探索与思考
  • MeterSphere v2.10.X-lts 双节点HA部署方案
  • Java进阶篇--网络编程
  • PyTorch入门之【CNN】
  • 马斯洛需求层次模型之安全需求之云安全浅谈
  • Pikachu靶场——远程命令执行漏洞(RCE)
  • 【WSN】无线传感器网络 X-Y 坐标到图形视图和位字符串前缀嵌入方法研究(Matlab代码实现)
  • Linux定时任务
  • 【Overload游戏引擎分析】画场景网格的Shader
  • 【JavaEE】多线程进阶(一)饿汉模式和懒汉模式
  • C++树详解
  • 支付环境安全漏洞介绍
  • 抄写Linux源码(Day16:内存管理)
  • Cookie和Session详解以及结合生成登录效果
  • Spring基础以及核心概念(IoC和DIQ)
  • 《C和指针》笔记32:多维数组初始化
  • 零食食品经营小程序商城的作用是什么
  • Java泛型--什么是泛型?
  • LabVIEW工业虚拟仪器的标准化实施
  • JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域
  • 汇编指令集合