python爬虫爬取淘宝商品并保存至mongodb数据库

article/2025/8/29 22:39:16

使用工具介绍

python3.8
selenium(请确保你已经成功安装了谷歌驱动chromedriver)
mongodb数据库
mongo-compass
谷歌浏览器

分析请求链接

打开淘宝首页的链接,https://www.taobao.com/如下:在这里插入图片描述
这里以商品ipad为例,在搜索框输入ipad,点击搜索,如下所示:
在这里插入图片描述
复制前四页的链接:找一下规律

第一页:https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=ipad&clk1=131aad029d6faa56c03288f51979aa45&upsId=131aad029d6faa56c03288f51979aa45&spm=a2e0b.20350158.search.1&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_13712137_1628510033830%3Bprepvid%3A201_11.136.53.174_13740411_1628511461979
第二页:https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=ipad&clk1=131aad029d6faa56c03288f51979aa45&upsId=131aad029d6faa56c03288f51979aa45&spm=a2e0b.20350158.31919782.1&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_13712137_1628510033830%3Bprepvid%3A201_11.136.53.174_13740411_1628511461979&pnum=1
第三页:https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=ipad&clk1=131aad029d6faa56c03288f51979aa45&upsId=131aad029d6faa56c03288f51979aa45&spm=a2e0b.20350158.31919782.1&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_13712137_1628510033830%3Bprepvid%3A201_11.136.53.174_13740411_1628511461979&pnum=2
第四页:https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=ipad&clk1=131aad029d6faa56c03288f51979aa45&upsId=131aad029d6faa56c03288f51979aa45&spm=a2e0b.20350158.31919782.1&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_13712137_1628510033830%3Bprepvid%3A201_11.136.53.174_13740411_1628511461979&pnum=3

很明显的可以看到除了第一页链接有些特殊,其他几页的链接基本一样,唯一的区别是最后的pnum的值不一样!分别为1,2,3。还可以发现当我们把值设置为0时,打开链接就是第一页的数据!可以根据这个规律构造前十页的链接:

base_url = 'https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=ipad&clk1=131aad029d6faa56c03288f51979aa45&upsId=131aad029d6faa56c03288f51979aa45&spm=a2e0b.20350158.31919782.1&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_13712137_1628510033830%3Bprepvid%3A201_11.136.53.174_13740411_1628511461979&pnum={}'
url_list = [base_url.format(i) for i in range(10)]

获取网页源码

直接使用requests获取网页源码是获取不到全部数据的,因此这里选择使用selenium获取网页源码数据,代码如下:

def get_html(url):browser = webdriver.Chrome()browser.get(url)response = browser.page_sourcebrowser.close()return response

解析数据

解析数据可以使用lxml模块。因为xpath表达式可以直接从谷歌浏览器复制,所以用这个比较简单!我这里简单了商品标签、店铺名称、商品价格、以及销量四个数据。
代码如下:

def parser(response):html = etree.HTML(response)li_list = html.xpath('//*[@id="mx_5"]/ul/li')ipad_info = []for li in li_list:title = li.xpath('./a/div[1]/span/text()')[0]price = li.xpath('./a/div[2]/span[2]/text()')[0]shop = li.xpath('./a/div[3]/div/text()')[0]sales = li.xpath('./a/div[4]/div[2]/text()')[0]ipad_info.append({'title': title, 'price': price, 'shop': shop, 'sales': sales})return ipad_info

存储数据

把解析的数据保存到mongodb数据库。这里新建一个名为Taobao的数据库,集合名称为ipad_info

def save_info_to_mongo(ipad_info):client = pymongo.MongoClient('localhost', 27017)collection = Collection(Database(client, 'Taobao'), 'ipad_info')for info in ipad_info:collection.insert_one(info)client.close()

全部代码

import pymongo
from lxml import etree
from selenium import webdriver
from pymongo.collection import Collection
from pymongo.database import Databasedef get_html(url):browser = webdriver.Chrome()browser.get(url)response = browser.page_sourcebrowser.close()return responsedef parser(response):html = etree.HTML(response)li_list = html.xpath('//*[@id="mx_5"]/ul/li')ipad_info = []for li in li_list:title = li.xpath('./a/div[1]/span/text()')[0]price = li.xpath('./a/div[2]/span[2]/text()')[0]shop = li.xpath('./a/div[3]/div/text()')[0]sales = li.xpath('./a/div[4]/div[2]/text()')[0]ipad_info.append({'title': title, 'price': price, 'shop': shop, 'sales': sales})return ipad_infodef save_info_to_mongo(ipad_info):client = pymongo.MongoClient('localhost', 27017)collection = Collection(Database(client, 'Taobao'), 'ipad_info')for info in ipad_info:collection.insert_one(info)client.close()if __name__ == '__main__':base_url = 'https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=ipad&clk1=131aad029d6faa56c03288f51979aa45&upsId=131aad029d6faa56c03288f51979aa45&spm=a2e0b.20350158.31919782.1&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_13712137_1628510033830%3Bprepvid%3A201_11.136.53.174_13740411_1628511461979&pnum={}'url_list = [base_url.format(i) for i in range(10)]print(url_list)for url in url_list:ipad_info = parser(get_html(url))save_info_to_mongo(ipad_info)

结果展示

我这里仅仅爬取了前十页数据,一页60条数据,一共600条数据如下!
在这里插入图片描述

最后

例子仅供参考学习,如有错误,敬请指出!


http://chatgpt.dhexx.cn/article/mqdn5MjO.shtml

相关文章

sfjd

一、声像资料 (一)监控视频

ftp服务器和sftp服务器

首先,ftp跟sftp是一种传输协议,一种安全,一种不安全。其中经过实践发现要有相对于的服务器才能实现上传跟下载,不能混淆使用。 windows中ftp服务器的建立方法:第一种:系统自带的ftp 开启服务:…

JFFS2

文章目录 一、JFFS2介绍1、JFFS2简介2、JFFS2框架 二、JFFS2实现1、JFFS2的机制2、JFFS2数据结构1)struct jffs2_sb_info2)struct jffs2_inode_info3)struct jffs2_raw_node_ref4)struct jffs2_inode_cache5)struct jf…

SFTP协议

SFTP协议 SCP协议本身打开SSH通道时指定的是scp命令,而是用SFTP时指定的sftp。以下是一些具体的介绍,详细内容需要参考对应的RFC文件。 下面是目前整理的使用的一份: 1) 协议中数据包格式 通过安全通道传输的所有包的格式如下&…

关于标志信息ZF、OF、SF、CF的理解

带标志加法器结构 零标志ZF 零标志是根据每一位加法器的计算结果 F i F_i Fi​相或得到的,所以只有在结果的每一位都为0的时候所有位相或才能得到0的输出,但是或门上有取反符号,所以在ZF标志的输出为1时代表结果全零,反之不全为0…

CF、SF、OF、ZF标志位

没学汇编,这种题我真是做一道错一道:-( OF(overflow flag) 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出。对于无符号整数运算,OF没有意义。 对于有符号数的溢出判断方式有: 1)采用一位符号位:思想…

cgo如何调用c++库

将c代码打包成静态库,再通过cgo调用,一直链接不上。起初以为是cgo只能用gcc,而我的静态库是是用g编译的,其实不然。 cgo调用c库,只需要在cpp源代码 include 头文件的时候,加上 extern "C" 就行了…

golang cgo 使用总结

文章目录 参数传递 基本数值类型切片字符串其他类型总结参考资料 CGO 提供了 golang 和 C 语言相互调用的机制。某些第三方库可能只有 C/C 的实现,完全用纯 golang 的实现可能工程浩大,这时候 CGO 就派上用场了。可以通 CGO 在 golang 在调用 C 的接口…

CGO总结

概述 cgo作为一个强大的工具,可以让go轻松实现调用c语言的巨额遗产。。。 问题 实际开发中,发现使用go语言调用c的动态库时,经常出现传入c的字符串发生变化的现象,如下: 情况1 由a.txt变为a.txt$\n 情况2 由plai…

cgo 机制 - 从 c 调用 go

文|朱德江(GitHub ID:doujiang24) MOSN 项目核心开发者 蚂蚁集团技术专家 专注于云原生网关研发的相关工作 本文 4656 字 阅读 12 分钟 一、前言 去年刚学 go 语言的时候,写了这篇 cgo 实现机制[1] ,介绍了 cgo 的基本…

深入学习CGO

深入学习CGO 快速入门基础知识import "C" 语句#cgo语句 GO与C的类型转换CGO函数调用CGO内部机制CGO内存模型C类封装成C APICGO调用在go runtime 层面的处理CGO的静态/动态库封装以及编译链接参数CGO定位内存泄露CGO性能CGO最佳使用场景总结参考文献: 很多…

快速上手 CGO,掌握在 Go 里写 C!

大家好,最近因为各种奇怪的原因,接触到了 Go 特色之一 CGO。这方面的相关内容也相对少一些,给大家抛砖引玉,有经验的大佬欢迎补充。 图片来源于 marlin 毕竟很多跨语言调用,还是会依赖 CGO 这个特性。希望大家在真正要…

DevOps学习心得总结

流程步骤: 1、PLAN 制定计划 (牢记交付给用户的目标) 2、CODE 开始编码 (使用相同的代码,不同版本的代码存储到仓库中,借助Git等工具在需要时合并【版本控制】) 3、BUILD 构建阶段…

DevOps工具链

DevOps是敏捷研发中持续构建(Continuous Build,CB)、持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)的自然延伸,从研发周期向右扩展…

DevOps及DevOps常用的工具介绍

目录 1. 什么是 DevOps2. DevOps 概念的起源2.1. 单体架构 瀑布模式2.2. 分布式架构 敏捷开发模式2.2.1. 多人协同开发问题2.2.2. 多机器问题2.2.3. 开发和运维角色的天生对立问题 2.3. 微服务架构 DevOps 3. DevOps 到底是什么4. DevOps 常用的工具4.1. Jenkins4.2. Kubern…

DevOps 简史

【注】本文节译自:https://www.bmc.com/blogs/devops-history/   IT 行业的当前状态受技术进步在整个历史中所产生的连锁效应所影响。不时出现的新技术极大地改变了世界运转的方式。最近,技术进步似乎开始以惊人的速度出现。自从互联网出现以来&#…

DevOps 学习

目录 一、概述 1、CI/CD简介 二、Git简介 三、Jenkins简介 一、概述 DevOps是Development和Operations的组合,也就是开发和运维的简写。 DevOps集文化理念、实践与工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件…

DevOps实践

数字化时代,技术的交付速度和质量,直接关系业务的发展和创新。IT 技术交付和运行的效率,成为决定数字化转型成败的关键,而 DevOps 要解决的问题正在于此,DevOps 成为数字化转型的重要一环。 能力构建 随着云原生技术的…