同事半个月都没搞懂selenium,我半个小时就给他整明白!顺手秀了一波爬淘宝的操作[通俗易懂]

同事半个月都没搞懂selenium,我半个小时就给他整明白!顺手秀了一波爬淘宝的操作[通俗易懂]教你用selenium爬虫,爬取淘宝商品详情信息!

大家好,又见面了,我是你们的朋友全栈君。

因为工作需要,同事刚开始学python,学到selenium这个工具半个月都没整明白,因为这个令他头秃了半个月,最后找到我给他解答。

所以我用一个淘宝爬虫实例给他解释了一遍,不用一个小时他就搞懂了。初学者也看得懂的爬虫项目。

在这里插入图片描述


在爬虫开始之前我们需要了解一些概念,本次爬虫会用到 selenium

什么是selenium?

selenium是网页自动化测试工具,可以自动化的操作浏览器。如果需要操作哪个浏览器需要安装对应的driver,比如你需要通过selenium操作chrome,那必须安装chromedriver,而且版本与chrome保持一致。

了解完之后,安装selenium:

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

一、导入模块

首先我们先导入模块

from selenium import webdriver

后续我们还会用到其他的模块,我先把它全部放出来:

在这里插入图片描述


二、浏览器初始化

然后就是浏览器的初始化

browser = webdriver.Chrome()

可以用很多浏览器,android、blackberry、ie等等。想用其他的浏览器,下载对应的浏览器驱动就可以了。

在这里插入图片描述

因为我这边只安装了谷歌浏览器的驱动,所以用的是chrome谷歌,驱动可以自己去下载。

chrome谷歌浏览器对应的driver:

http://npm.taobao.org/mirrors/chromedriver/


三、登录获取页面

首先要解决的是登录问题,登录时不要直接输入账号登录,因为淘宝的反爬特别严重,如果它检测到你是一个爬虫,就不允许登录,淘宝在登录这一块的措施是很严格的。

所以我用了另一种登录方法,支付宝扫码登录,请求到支付宝扫码登录页面的网址。

def loginTB():
    browser.get(
        'https://auth.alipay.com/login/index.htm?loginScene=7&goto=https%3A%2F%2Fauth.alipay.com%2Flogin%2Ftaobao_trust_login.htm%3Ftarget%3Dhttps%253A%252F%252Flogin.taobao.com%252Fmember%252Falipay_sign_dispatcher.jhtml%253Ftg%253Dhttps%25253A%25252F%25252Fwww.taobao.com%25252F&params=VFBMX3JlZGlyZWN0X3VybD1odHRwcyUzQSUyRiUyRnd3dy50YW9iYW8uY29tJTJG')

跳转到支付宝扫码登录界面。

在这里插入图片描述

我这边设置了一个等待时间,180秒后搜索框出现,其实不会等待180秒,是一个显示等待,只要元素出现,就不会在等待了。

再查找搜索框并输入关键字搜索。

   # 设置显示等待 等待搜索框出现
    wait = WebDriverWait(browser, 180)
    wait.until(EC.presence_of_element_located((By.ID, 'q')))

    # 查找搜索框,输入搜索关键字并点击搜索
    text_input = browser.find_element_by_id('q')
    text_input.send_keys('美食')
    btn = browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
    btn.click()

四、解析数据

获取网页之后,再来解析数据,将所需要的商品数据爬到,这里用的是lxml解析库,XPath选取子节点直接解析。
在这里插入图片描述


五、爬取页面

在搜索框搜索之后会出现所需要的商品页面详情,但是不只是爬取一页,是要不断的下一页爬取多页的商品信息。这里写了一个死循环,一直爬到商品页没有了

def loop_get_data():
    page_index = 1
    while True:
        print("===================正在抓取第{}页===================".format(page_index))
        print("当前页面URL:" + browser.current_url)
        # 解析数据
        parse_html(browser.page_source)

        # 设置显示等待 等待下一页按钮
        wait = WebDriverWait(browser, 60)
        wait.until(EC.presence_of_element_located((By.XPATH, '//a[@class="J_Ajax num icon-tag"]')))
        time.sleep(1)
        try:
            # 通过动作链,滚动到下一页按钮元素处
            write = browser.find_element_by_xpath('//li[@class="item next"]')
            ActionChains(browser).move_to_element(write).perform()
        except NoSuchElementException as e:
            print("爬取完毕,不存在下一页数据!")
            print(e)
            sys.exit(0)
        time.sleep(0.2)
        # 点击下一页
        a_href = browser.find_element_by_xpath('//li[@class="item next"]')
        a_href.click()
        page_index += 1

六、爬虫完成

最后就是的调用 loginTB(), loop_get_data() 这两个之前写好的,def loop_get_data() 在while循环里就调用了,所以不需要再调用。

爬虫完成后存到了一个shop_data.json文件里。

在这里插入图片描述

爬取的结果如下:

在这里插入图片描述

本次爬虫涉及到的网页均可替换,小伙伴们需要源代码,在评论区评论:taobao后私信我就可以,或者在爬取的过程中遇到什么问题可以随时问我。


在这里插入图片描述
感谢每一位愿意读完我文章的人,对于新媒体创作我也在不断学习中。创作是一件非常值得持续投入的事情,因为你们每一次的支持都是对我极大的肯定!
再次感谢大家的支持,在此我整理了一些适合大多数人学习的资…料,免…费给大家下…载…领…取!
看!干…货在这里↓ ↓ ↓

  • 2000多本Python电子书。(主流的经典的都包含在内)
  • Python基础入门、爬虫、web开发、大数据分析方面的视频。
  • 多个项目及源码。(四五十个有趣且经典的练手项目及源码)
  • Python所有方向学习路线图(更系统更高效的学习)
  • 经典Python面试题。(面试大厂稳了)
  • web前端开发学习视频及PDF电子书。(都是最新版次的书籍)

有需要的读者可以直接拿走,在我的学习…交流…君+羊。有学习上的疑问、或者代码问题需要解决的,想找到志同道合的伙伴也可以进君羊,记住哦仅限学习交流!!!
裙号是:1049249997
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149590.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Glide使用总结

    Glide使用总结

    2021年10月1日
    39
  • android系统中toast是什么_android studio toast不显示

    android系统中toast是什么_android studio toast不显示Toast控件介绍Toast是Android系统提供的轻量级信息提醒机制,用于向用户提示即时消息,它显示在应用程序界面的最上层,显示一段时间后自动消失不会打断当前操作,也不获得焦点。使用Toast提示信息的实例代码:Toast.makeText(Context,Text,Time),show();这段代码首先调用了Toast的makeText方法用来设置提示信息,Context:表示应用程序环境的信息,就是当前组件的上下文环境,如果在Activity中使用的话,那么该参数可设置为”Activi

    2022年9月13日
    2
  • Latex换行等号对齐「建议收藏」

    Latex换行等号对齐「建议收藏」可以使用‘\\‘表示换行,在需要对齐的地方使用‘&’便可实现对齐

    2022年5月15日
    83
  • java简历的项目经验怎么写(java一年项目经验模板参考)

    前言今年的金三银四已经过去一大半了,在这其中参与过不少面试,2021都说工作不好找,这也是对开发人员的要求变向的提高了。之前在Github上收获15K+star的Java核心神技(这参数,质量多高就不用我多说了吧)非常全面,包含基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty与RPC、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等内容非常丰富,已经帮很多人拿下互联网一线公司的offer美团一面:1、Concurr

    2022年4月11日
    72
  • BZOJ 2049: [Sdoi2008]Cave 洞穴勘測 LCT[通俗易懂]

    BZOJ 2049: [Sdoi2008]Cave 洞穴勘測 LCT

    2022年2月3日
    56
  • java 应用监控_java监控服务器运行状态

    java 应用监控_java监控服务器运行状态每天记录学习,每天会有好心情。*^_^*每天都要认真学习,才能更加进步。└(^o^)┘在工作和学习的过程中要善于思考,勤于学习。并做出适当的记录,才能最快速的学习并掌握一项知识。希望在这个平台和大家一起共同成长,和大家分享一个SSM(MYECLIPSE)项目,该项目名称为基于web的java舆情监测系统。采用当前非常流行的B/S体系结构,以JAVA作为开发技术,主要依赖SSM技术框架,mysql数…

    2022年9月2日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号