Python selenuim实战

简介: 使用Selenium爬取苏宁易购商品信息,步骤包括打开网页、翻页、获取信息并保存至本地JSON文件。核心功能有滚动页面加载更多商品(模拟鼠标滚动)和抓取每页数据(提取标题和价格)。主程序通过循环实现自动翻页,直到无下一页按钮,最终将所有数据整合到一个JSON文件中。完整代码展示了所需导入的模块、滚动页面及获取数据的函数,以及主程序逻辑。

selenuim实战

这个案例是爬取苏宁易购的商品信息,需要知道xpath标签的位置和如何实现翻页以及最终的数据保存到本地。

首先说流程

  1. 打开网页
  2. 翻页
  3. 获取信息并保存
  4. 重复2

本节案例中涉及了几个技术难点:第一,如何下拉滚动条下载商品,第二,如何实现翻页,也就是抓取下一页的内容,第三,如何判断数据已经抓取完毕,即终止页。下面我们逐步讲解。

当然!让我一步步来解释以上代码的作用和细节:

导入必要的模块

from selenium import webdriver
from selenium.webdriver.common.by import By
import json
import time
from selenium.webdriver.edge.options import Options

这里导入了Selenium库中需要的模块,包括webdriver用于驱动浏览器,By用于定位元素,json用于处理JSON格式数据,time用于进行时间相关操作,Options用于配置浏览器选项。

实现滚动页面函数

def scrollToDown():
    for i in range(1, 100):
        time.sleep(0.7)
        driver.execute_script(f"window.scrollTo(0, {i*500})")
        y = driver.execute_script("return window.scrollY")
        if y > 11000:
            break

这个函数名为scrollToDown,它的作用是模拟鼠标滚动页面,使页面不断向下滚动以加载更多的商品信息。循环中的execute_script方法用于在浏览器中执行JavaScript代码,实现滚动效果,并通过判断页面滚动的位置来确定何时停止滚动。

实现获取数据函数

def getData():
    prices = driver.find_elements(By.XPATH, "//div[@class='price-box']")
    titles = driver.find_elements(By.XPATH, "//div[@class='title-selling-point']")
    items = []
    for title, price in zip(titles, prices):
        item = {
   
            "title": title.text,
            "price": price.text
        }
        items.append(item)
    with open("1.json", "a", encoding="utf-8") as f:
        for item in items:
            json.dump(item, f, ensure_ascii=False)
            f.write(",\n")

这个函数名为getData,它的作用是从当前页面中提取商品标题和价格信息,并将其保存为JSON格式的文件。通过find_elements方法找到对应的元素,然后将数据组装成字典形式,最后以JSON格式写入文件。

  1. 主程序
if __name__ == '__main__':
    options = Options()
    url = "https://list.suning.com/0-179001-0.html?safp=d488778a.46601.searchMain.4&safc=cate.0.0&safpn=10006"
    driver = webdriver.Edge()
    driver.get(url)
    with open("suning.json", "a", encoding="utf-8") as f:
        f.write("[\n")
    while True:
        scrollToDown()
        getData()
        time.sleep(1)
        try:
            next_page_button = driver.find_element(By.XPATH, "//a[@id='nextPage']")
            if next_page_button.is_displayed():
                next_page_button.click()
            else:
                break
        except:
            break
    with open("1.json", "a", encoding="utf-8") as f:
        f.write("\n]")
    driver.quit()

主程序首先设置了浏览器选项并指定了要爬取的网址,然后打开了浏览器并开始爬取数据。while循环不断地滚动页面、获取数据,并尝试点击下一页按钮进行翻页,直到没有下一页按钮为止。最后关闭浏览器并保存数据。

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import json
import time
from selenium.webdriver.edge.options import Options

def scrollToDown():
    for i in range(1, 100):
        time.sleep(0.7)
        driver.execute_script(f"window.scrollTo(0, {i*500})")
        y = driver.execute_script("return window.scrollY")
        if y > 11000:
            break

def getData():
    prices = driver.find_elements(By.XPATH, "//div[@class='price-box']")
    titles = driver.find_elements(By.XPATH, "//div[@class='title-selling-point']")
    items = []
    for title, price in zip(titles, prices):
        item = {
   
            "title": title.text,
            "price": price.text
        }
        items.append(item)
    with open("1.json", "a", encoding="utf-8") as f:
        for item in items:
            json.dump(item, f, ensure_ascii=False)
            f.write(",\n")

if __name__ == '__main__':
    options = Options()
    url = "https://list.suning.com/0-179001-0.html?safp=d488778a.46601.searchMain.4&safc=cate.0.0&safpn=10006"
    driver = webdriver.Edge()
    driver.get(url)
    with open("suning.json", "a", encoding="utf-8") as f:
        f.write("[\n")
    while True:
        scrollToDown()
        getData()
        time.sleep(1)
        try:
            next_page_button = driver.find_element(By.XPATH, "//a[@id='nextPage']")
            if next_page_button.is_displayed():
                next_page_button.click()
            else:
                break
        except:
            break
    with open("1.json", "a", encoding="utf-8") as f:
        f.write("\n]")
    driver.quit()
目录
相关文章
|
4天前
|
Python
Python的编辑工具-Jupyter notebook实战案例
这篇博客介绍了Jupyter Notebook的安装和使用方法,包括如何在本地安装Jupyter、启动和使用Jupyter Notebook进行编程、文档编写和数据分析,以及如何执行和管理代码单元(Cell)的快捷键操作。
15 4
Python的编辑工具-Jupyter notebook实战案例
|
4天前
|
Python
Python软件包及环境管理器conda实战篇
详细介绍了如何使用conda进行Python软件包管理及环境管理,包括查看、安装、卸载软件包,切换源,管理不同版本的Python环境,以及解决使用过程中可能遇到的错误。
24 2
Python软件包及环境管理器conda实战篇
|
3天前
|
数据采集 机器学习/深度学习 数据挖掘
探索Python编程之美:从基础到实战
【9月更文挑战第3天】本文旨在通过深入浅出的方式,带领读者领略Python编程语言的魅力。我们将从基本语法入手,逐步深入至高级特性,最终通过实战案例将理论知识与实践操作相结合。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
20小时前
|
数据采集 机器学习/深度学习 存储
Python编程入门:从基础到实战
【9月更文挑战第6天】本文将引导你走进Python的世界,从零基础开始,逐步掌握Python的基础语法和常用库。我们将通过实例讲解,让你在轻松愉快的氛围中学习Python编程。最后,我们还将分享一些实用的技巧和资源,帮助你在学习过程中不断进步。让我们一起开启Python编程之旅吧!
15 4
|
2天前
|
数据采集 Python
探索Python中的异步编程:从基础到实战
【9月更文挑战第4天】在Python的海洋中,异步编程犹如一艘快艇,让你的代码在执行效率和响应速度上破浪前行。本文将带你从理解“异步”这一概念出发,深入到Python的asyncio库的使用,再到构建一个实际的异步Web爬虫项目,体验异步编程的魅力。我们将避开枯燥的理论,通过生动的比喻和直观的代码示例,让异步编程的知识活灵活现。
|
2天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【9月更文挑战第5天】性能测试是确保应用在高负载下稳定运行的关键。本文介绍Apache JMeter和Locust两款常用性能测试工具,帮助识别并解决性能瓶颈。JMeter适用于测试静态和动态资源,而Locust则通过Python脚本模拟HTTP请求。文章详细讲解了安装、配置及使用方法,并提供了实战案例,帮助你掌握性能测试技巧,提升应用性能。通过分析测试结果、模拟并发、检查资源使用情况及代码优化,确保应用在高并发环境下表现优异。
20 5
|
1天前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
6 1
|
2天前
|
测试技术 Apache 数据库
从慢如蜗牛到飞一般的感觉!Python性能测试实战,JMeter&Locust助你加速🏃‍♂️
【9月更文挑战第6天】你的Python应用是否曾因响应缓慢而让用户望而却步?借助JMeter与Locust,这一切将迎刃而解。JMeter作为Apache基金会的明星项目,以其强大的跨平台和多协议支持能力,成为性能测试领域的魔法师;而Locust则以Python的简洁与高效,让性能测试更加灵活。通过实战演练,你可以利用这两款工具轻松识别并解决性能瓶颈,优化数据库查询、网络配置等,最终使应用变得敏捷高效,轻松应对高并发挑战。
7 1
|
4天前
|
安全 数据挖掘 Python
Python的打包工具(setup.py)实战篇
关于如何使用Python的setup.py工具打包Python项目的实战教程。
8 0
Python的打包工具(setup.py)实战篇
|
4天前
|
Python
Python软件包管理工具pip实战篇
详细介绍了Python软件包管理工具pip的使用方法,包括安装、搜索、卸载软件包,修改软件源,导出和安装依赖列表,以及查看pip版本和配置信息等操作,并提供了相关命令示例。
14 0
Python软件包管理工具pip实战篇
下一篇
DDNS