python淘宝网页爬虫数据保存到 csv和mysql(selenium)

 数据库连接设置(表和字段要提前在数据库中建好)

# 数据库中要插入的表
MYSQL_TABLE = 'goods'

# MySQL 数据库连接配置,根据自己的本地数据库修改
db_config = {
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': 'ma*****6',
    'database': 'may2024',
    'charset': 'utf8mb4',
}

# 创建 MySQL 连接对象
conn = pymysql.connect(**db_config)
cursor = conn.cursor()

全局设置

execl_save = 'zp2024_info.csv'

 库导入

from pyquery import PyQuery as pq

获取网页信息(前提是:已进入搜索结果页面)

# 获取每一页的商品信息;
def get_goods(num):
    # 获取商品前固定等待2-4秒
    # random_sleep(2, 4)
    product_c = []
    clear_mysql_table(MYSQL_TABLE)
    clear_csv_file(execl_save)
    driver = driver_configure.GetDriver().get_driver()
    next_page_xpath = '//*[@id="sortBarWrap"]/div[1]/div[2]/div[2]/div[8]/div/button[2]'
    for n in range(num):
        html = driver.page_source
        doc = pq(html)
        # 提取所有商品的共同父元素的类选择器
        items = doc(
            'div.PageContent--contentWrap--mep7AEm > div.LeftLay--leftWrap--xBQipVc > div.LeftLay--leftContent--AMmPNfB > div.Content--content--sgSCZ12 > div > div').items()

        for item in items:
            # 定位商品标题
            title = item.find('.Title--title--jCOPvpf span').text()
            # 定位价格
            price_int = item.find('.Price--priceInt--ZlsSi_M').text()
            price_float = item.find('.Price--priceFloat--h2RR0RK').text()
            if price_int and price_float:
                price = float(f"{price_int}{price_float}")
            else:
                price = 0.0
            # 定位交易量
            deal = item.find('.Price--realSales--FhTZc7U').text()
            # 转化万为数字
            if '万' in deal:
                deal_n = deal.split("万")[0]
                deal = int(10000 * int(deal_n))
            elif '+' in deal:
                deal = int(deal.split("+")[0])  # 10+人收货/10+人付款
            elif '付款' in deal:
                deal = int(deal.split("人")[0])  # 10人付款
            # 定位所在地信息
            location = item.find('.Price--procity--_7Vt3mX').text()
            if ' ' in location:
                province = location.split(" ")[0]
                city = location.split(" ")[1]
            else:
                province = location
                city = location
            # 定位店名
            shop = item.find('.ShopInfo--TextAndPic--yH0AZfx a').text()
            # 定位包邮的位置
            postText = item.find('.SalesPoint--subIconWrapper--s6vanNY span').text()
            result = 1 if "包邮" in postText else 0

            # 构建商品信息字典
            product = {
                'title': title,
                'price': price,
                'deal': deal,
                'location': location,
                'province': province,
                'city': city,
                'shop': shop,
                'isPostFree': result
            }
            product_c.append(product)
            # print(product)
            save_to_mysql(product)

        if n < num-1:
            print("点击下一页,至第{}页".format(n + 2))
            baseClass.BaseClass().click_element(next_page_xpath)  # 点击 下一页
            baseClass.BaseClass().scroll_to_end()  # 滚动到底部
    # print(product_c)
    save_to_csv(product_c)


# 在 save_to_mysql 函数中保存数据到 MySQL
def save_to_mysql(result):
    try:
        sql = "INSERT INTO {}(price, deal, title, shop, location, province, city, isPostFree) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)".format(MYSQL_TABLE)
        # print("sql语句为:  " + sql)
        cursor.execute(sql, (result['price'], result['deal'], result['title'], result['shop'], result['location'], result['province'], result['city'], result['isPostFree']))
        conn.commit()
        # print('存储到MySQL成功: ', result)
    except Exception as e:
        print('存储到MYsql出错: ', result, e)


# 清空mysql某个表数据
def clear_mysql_table(table_name):
    truncate_sql = f'TRUNCATE TABLE {table_name}'
    cursor.execute(truncate_sql)
    conn.commit()
    # close_cursor_conn()


# 关闭数据库游标和连接
def close_cursor_conn():
    cursor.close()
    conn.close()


# 将商品数据保存在csv
def save_to_csv(result):
    # df = pd.DataFrame(result, columns=['title', 'price', 'deal', 'location', 'province', 'city', 'shop', 'isPostFree'])
    df = pd.DataFrame(result)
    df.to_csv(execl_save, index=False, encoding='gbk')


# 清空 csv数据
def clear_csv_file(f):
    with open(f, 'w') as file:
        file.truncate(0)

部分封装

# 滑动页面到底部
    def scroll_to_end(self):
        for i in range(3):
            self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            time.sleep(2)
# 查找可点击元素并点击
    def click_element(self, element):
        try:
            submit = WebDriverWait(self.driver, 15).until(EC.element_to_be_clickable((By.XPATH, element)))
            submit.click()
        except TimeoutError:
            print("翻页超时报错")
        rand_num = random.randint(5, 15)  # 设置随机等待的时间
        time.sleep(rand_num)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 篇-快速了解事务、索引

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 事务概述 1.1 事务四大特性(ACID) 2.0 索引概述 2.1 关于 “索引一定要创建在主键上&#xff1f;” 的问题 2.2 索引操作语法 2.3 索引结构 1.0 事务概述 事务是…

【生态适配】亚信安慧AntDB数据库与OpenCloudOS、TencentOS Server五款产品完成兼容互认

日前&#xff0c;亚信安慧AntDB数据库与OpenCloudOS8、OpenCloudOS9、TencentOS Server 2、TencentOS Server 3、TencentOS Server 4五款操作系统完成兼容互认。经过严格测试&#xff0c;亚信安慧AntDB数据库与这五款操作系统兼容良好&#xff0c;整体运行稳定。 图1&#xff1…

stm32普通定时器脉冲计数(发送固定脉冲个数),控制步进电机驱动器

拨码开关设置驱动器&#xff0c;细分 方法思路&#xff1a;用通用定时器TIM2&#xff0c;1ms产生一次中断&#xff1b;在中断里做IO反转&#xff1b; 发送10个脉冲信号

签约仪式如何策划和安排流程?如何邀约媒体现场见证报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 签约仪式的策划和安排流程&#xff0c;以及邀约媒体现场见证报道&#xff0c;都是确保活动成功和提升影响力的关键环节。以下是一些建议&#xff1a; 签约仪式的策划和安排流程 明确目标…

patreon订阅

订阅制度&#xff1a; 创作者可以创建一个Patreon页面&#xff0c;邀请粉丝成为其“赞助者”或“粉丝”。这些粉丝可以选择每月或每个创作周期为创作者提供一定数额的资金支持&#xff0c;形成了一种订阅模式。 奖励层次&#xff1a; 创作者通常会设置不同的奖励层次&#xff…

MySQL安装使用(mac)

目录 一、下载MySQL 二、环境变量 三、启动 MySql 四、初始化密码设置 一、下载MySQL 打开 MySql 官方下载页面 我是macOS12&#xff0c;所以选择了8.0.30 下载完成之后&#xff0c;打开安装&#xff0c;一直下一步安装完成&#xff0c;在最后安装完成时&#xff0c;会弹出…

一周学会Django5 Python Web开发-Django5内置模板引擎-模板上下文变量

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计32条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Linux系统Docker部署DbGate并结合内网穿透实现公网管理本地数据库

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-66GkyG9g7oNq7tl8 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

Windows®、Linux® 和 UNIX® 系统都适用的远程桌面工具 OpenText ETX

Windows、Linux 和 UNIX 系统都适用的远程桌面工具 OpenText ETX 为 Windows、Linux 和 UNIX 实施精益、经济高效的虚拟化&#xff1b;提供完整的远程 Windows 可用性&#xff1b;以类似本地的性能远程工作&#xff1b;安全地保护系统和知识产权&#xff08;IP&#xff09;&am…

k8s-生产级的k8s高可用(1) 24

高可用集群 实验至少需要三个master&#xff08;控制节点&#xff09;&#xff0c;一个可以使外部可以访问到master的load balancer&#xff08;负载均衡&#xff09;以及一个或多个外部节点worker&#xff08;也要部署高可用&#xff09;。 再克隆三台主机 清理并重启 配置两…

YOLOv7原创改进:原创自研 | CVPR2024 DCNv4结合YOLOv9 SPPELAN二次创新 | 涨点小能手

💡💡💡本文独家改进: CVPR2024 DCNv4结合YOLOv9 SPPELAN二次创新,结构图如下: 改进结构图: 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 收录 YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.html 💡�…

银河麒麟服务器ky10 server wvp镜像制作

在线安装docker yum install docker -y cat >/etc/docker/daemon.json<<EOF{"registry-mirrors": ["https://registry.docker-cn.com","https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"]} EOF systemctl start …

java注释的详尽解析

一、什么是注解 (1).注解的作用 ①&#xff1a;注解一般用于对程序的说明&#xff0c;就像注释一样&#xff0c;但是区别是注释是给人看的&#xff0c;但是注解是给程序看的。 ②&#xff1a;让编译器进行编译检查的作用&#xff0c;比如下边这个Override注解是重写的意思&am…

Python 对Excel工作表中的数据进行排序

在Excel中&#xff0c;排序是整理数据的一种重要方式&#xff0c;它可以让你更好地理解数据&#xff0c;并为进一步的分析和报告做好准备。本文将介绍如何使用第三方库Spire.XLS for Python通过Python来对Excel中的数据进行排序。包含以下三种排序方法示例&#xff1a; 按数值…

@EnableWebMvc介绍和使用详细demo

EnableWebMvc是什么 EnableWebMvc 是 Spring MVC 中的一个注解&#xff0c;它用于启用 Spring MVC 框架的基本功能&#xff0c;以便你可以使用 Spring MVC 提供的特性来处理 Web 请求。 通常情况下&#xff0c;在基于 Spring Boot 的应用中&#xff0c;并不需要显式地使用 Ena…

NASA数据集——GOES-16卫星的高级图像和地球观测数据

简介 GHRSST NOAA/STAR GOES-16 ABI L2P America Region SST v2.70 dataset in GDS2 ABI_G16-STAR-L2P-v2.70是美国国家航空航天局&#xff08;NASA&#xff09;的一种卫星数据处理产品。这个产品是由GOES-16&#xff08;也称为GOES-East&#xff09;卫星的先进基线/全球地球…

IT廉连看——Uniapp——配置文件pages

IT廉连看——Uniapp——配置文件pages [IT廉连看] 本堂课主要为大家介绍pages.json这个配置文件 一、打开官网查看pages.json可以配置哪些属性。 下面边写边讲解 新建一个home页面理解一下这句话。 以下一些页面的通用配置 通用设置里我们可以对导航栏和状态栏进行一些设…

java SSM售后服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

源码特点 java SSM售后服务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采用B/…

【C语言】指针相关知识点

什么是指针&#xff1f; 指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向&#xff08;points to&#xff09;存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元&#xff0c;可以说&#xff0c;地…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理

继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btstack_main,在btstack_main里面首先做一些初始化,然后…