selenium京东商城爬取

这篇具有很好参考价值的文章主要介绍了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 True
            time1 = int(time.time() - start_time)
            # 60s没验证成功,直接终止selenium进程
            if time1 >= 60:
                self.browser.quit()
                return False

2.完整代码 文章来源地址https://www.toymoban.com/news/detail-734161.html

from selenium import webdriver
import time
from selenium.webdriver.common.by import By


class 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 True
            time1 = int(time.time() - start_time)
            # 60s没验证成功,直接终止selenium进程
            if time1 >= 60:
                self.browser.quit()
                return False

    def 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 += 1

    def run(self):
        is_login =  self.login_html(loginname, password)
        # 如果登录失败直接终结函数
        if not is_login :
            return

        self.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)
                break
        time.sleep(3)
        self.browser.quit()


if __name__ == '__main__':
    loginname = '用户名'
    password = '密码'
    spider = JdSpider()
    spider.run()

到了这里,关于selenium京东商城爬取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫|使用Selenium轻松爬取网页数据

    1. 什么是selenium? Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作浏览器一样。支持的浏览器包括IE,Firefox,Safari,Chrome等。 Selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用

    2024年02月04日
    浏览(58)
  • python爬虫实战 scrapy+selenium爬取动态网页

    最近学习了scrapy爬虫框架,想要找个目标练练手。由于现在很多网页都是动态的,因此还需要配合selenium爬取。本文旨在记录这次学习经历,如有疑问或不当之处,可以在评论区指出,一起学习。 对scrapy不了解的同学可以阅读这篇文章 爬虫框架 Scrapy 详解,对scrapy框架介绍的

    2024年02月07日
    浏览(83)
  • python 使用selenium等爬虫技术爬取某华网

    本程序可以根据时间要求获取某华网上不同模块的新闻内容,时间要求包括设置截止日期,以及时间间隔,比如说获取距离2023-04-20一天以内的新闻。主要使用了selenium有关的爬虫技术,具体实现如下: 目录 目录 一、SpiderXinhua类的基础属性 二、日期获取与格式转换的函数ti

    2024年01月16日
    浏览(38)
  • Python爬虫实战:selenium爬取电商平台商品数据(1)

    def index_page(page): “”\\\" 抓取索引页 :param page: 页码 “”\\\" print(‘正在爬取第’, str(page), ‘页数据’) try: url = ‘https://search.jd.com/Search?keyword=iPhoneev=exbrand_Apple’ driver.get(url) if page 1: input = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/input’) button = driver.find_element_by_xpath(‘

    2024年04月28日
    浏览(45)
  • Python爬虫入门系列之Selenium实现动态页面爬取

    在前一篇博客中,我们学习了如何使用多线程优化爬虫程序。但是,如果要爬取的网页是动态生成的或者包含大量JavaScript代码,单纯的静态页面爬取就不足够了。为了解决这个问题,我们可以使用Selenium库来模拟真实的浏览器行为,从而实现动态页面的爬取。 Selenium是一个用

    2024年02月11日
    浏览(59)
  • Python爬虫入门:使用selenium库,webdriver库模拟浏览器爬虫,模拟用户爬虫,爬取网站内文章数据,循环爬取网站全部数据。

    *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。 目录 准备工具: 思路: 具体操作: 调用需要的库: 启动浏览器驱动: 代码主体:  完整代码(解析注释): Python环境; 安装selenium库; Python编辑器; 待爬取的网站; 安装好的浏览器; 与浏览器版本相对应的

    2023年04月24日
    浏览(58)
  • Java网络爬虫——jsoup快速上手,爬取京东数据。同时解决‘京东安全’防爬问题

    网络爬虫,就是在 浏览器上,代替人类爬取数据 ,Java网络爬虫就是通过Java编写爬虫代码,代替人类从网络上爬取信息数据。程序员通过设定既定的规则,让程序代替我们从网络上获取海量我们需要的数据,比如图片,企业信息等。 爬虫的关键是对于网页信息的解析。 什么

    2024年02月10日
    浏览(44)
  • Selenium介绍--实例爬取京东商品信息与图片

    目录 一、Selenium简介 二、Selenium组成 三、Selenium特点 四、Selenium的基本使用 1.下载所用浏览器需要的驱动 2.创建项目并导入依赖 3.入门 3.代码演示 五、实例爬取京东商品信息与图片 _ 5.1 执行效果 操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chr

    2023年04月08日
    浏览(37)
  • Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)(1)

    browser.find_element_by_xpath(‘.//ul[@id=“headerNav”]/li[4]’).click() 8.点击群管理之后,进入群管理界面,我们需要的是成员管理 WebDriverWait(browser, 1000).until( EC.presence_of_all_elements_located( (By.CLASS_NAME, ‘color-tit’) ) ) browser.find_element_by_class_name(‘color-tit’).click() 9.点击成员管理之后会重新

    2024年04月28日
    浏览(47)
  • 爬虫案例—京东数据爬取、数据处理及数据可视化(效果+代码)

            使用PyCharm(引用requests库、lxml库、json库、time库、openpyxl库和pymysql库)爬取京东网页相关数据(品牌、标题、价格、店铺等) 数据展示(片段):         京东网页有反爬措施,需要自己在网页登录后,获取cookie,加到请求的header中(必要时引入time库,设置爬取

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包