7.1.4 Selenium 爬取京东商品信息实战

目录

1、实战内容

2、思路

3、分析 url

4、开始操作

1、得到 Cookies

2、访问页面,得到 response

3、解析页面

4、存入 MySQL

5、1-3步总代码


1、实战内容

爬取京东笔记本电脑商品的信息(如:价格、商品名、评论数量),存入 MySQL 中

2、思路

京东需要登录才能搜索进入,所以首先从登录页面出发,自己登录,然后等待,得到 Cookies,之后带着 Cookies 模拟访问页面,得到页面的 response,再对 response 进行分析,将分析内容存入 MySQL 中。

3、分析 url

来到 京东搜索 笔记本电脑,之后观察首页之后的几页的链接,如下:

不难发现,除了首页之外,其他链接的区别是从第四行的 page 开始,大胆猜测链接就到此即可,且规律也显而易见,就可以直接构造链接。

4、开始操作

1、得到 Cookies

from selenium import webdriver
import json, timedef get_cookie(url):browser = webdriver.Chrome()browser.get(url)    # 进入登录页面time.sleep(10)      # 停一段时间,自己手动登录cookies_dict_list = browser.get_cookies()  # 获取list的cookiescookies_json = json.dumps(cookies_dict_list)  # 列表转换成字符串保存with open('cookies.txt', 'w') as f:f.write(cookies_json)print('cookies保存成功!')browser.close()if __name__ == '__main__':url_login = 'https://passport.jd.com/uc/login?'     # 登录页面urlget_cookie(url_login)

之后就可看到 txt 文件中的 cookies(多个),之后模拟登录构造 cookie 时,对照其中的即可.

2、访问页面,得到 response

当 selenium 访问时,若页面是笔记本电脑页,直接进行爬取;若不是,即在登录页,构造 cookie,添加,登录;

js 语句是使页面滑倒最低端,等待数据包刷新出来,才能得到完整的页面 response(这里的 resposne 相当于使用 request 时候的 response.text );

def get_html(url):    # 此 url 为分析的笔记本电脑页面的 urlbrowser = webdriver.Chrome()browser.get(url)if browser.current_url == url:js = "var q=document.documentElement.scrollTop=100000"browser.execute_script(js)time.sleep(2)responses = browser.page_sourcebrowser.close()return responseselse:with open('cookies.txt', 'r', encoding='utf8') as f:listCookies = json.loads(f.read())for cookie in listCookies:cookie_dict = {'domain': '.jd.com','name': cookie.get('name'),'value': cookie.get('value'),"expires": '1746673777',    # 表示 cookies到期时间'path': '/',            # expiry必须为整数,所以使用 expires'httpOnly': False,"sameSite": "Lax",'Secure': False}browser.add_cookie(cookie_dict) # 将获得的所有 cookies 都加入time.sleep(1)browser.get(url)js = "var q=document.documentElement.scrollTop=100000"browser.execute_script(js)time.sleep(2)response = browser.page_sourcebrowser.close()return response

cookies 到期时间是用时间戳来记录的,可用工具查看时间戳(Unix timestamp)转换工具 - 在线工具

3、解析页面

这里我使用了 Xpath 的解析方法,并将结果构造成字典列表,输出。

def parse(response):html = etree.HTML(response)products_lis = html.xpath('//li[contains(@class, "gl-item")]')products_list = []for product_li in products_lis:product = {}price = product_li.xpath('./div/div[@class="p-price"]/strong/i/text()')name = product_li.xpath('./div/div[contains(@class, "p-name")]/a/em/text()')comment = product_li.xpath('./div/div[@class="p-commit"]/strong/a/text()')product['price'] = price[0]product['name'] = name[0].strip()product['comment'] = comment[0]products_list.append(product)print(products_list)print(len(products_list))

4、存入 MySQL

上述已经得到每一个商品数据的字典,所以直接对字典或字典列表进行存储即可。

参考链接:4.4 MySQL存储-CSDN博客 5.2 Ajax 数据爬取实战-CSDN博客

5、1-3步总代码

from selenium import webdriver
import json, time
from lxml import etreedef get_cookie(url):browser = webdriver.Chrome()browser.get(url)    # 进入登录页面time.sleep(10)      # 停一段时间,自己手动登录cookies_dict_list = browser.get_cookies()  # 获取list的cookiescookies_json = json.dumps(cookies_dict_list)  # 转换成字符串保存with open('cookies.txt', 'w') as f:f.write(cookies_json)print('cookies保存成功!')browser.close()def get_html(url):browser = webdriver.Chrome()browser.get(url)if browser.current_url == url:js = "var q=document.documentElement.scrollTop=100000"browser.execute_script(js)time.sleep(2)responses = browser.page_sourcebrowser.close()return responseselse:with open('cookies.txt', 'r', encoding='utf8') as f:listCookies = json.loads(f.read())for cookie in listCookies:cookie_dict = {'domain': '.jd.com','name': cookie.get('name'),'value': cookie.get('value'),"expires": '1746673777','path': '/','httpOnly': False,"sameSite": "Lax",'Secure': False}browser.add_cookie(cookie_dict) # 将获得的所有 cookies 都加入time.sleep(1)browser.get(url)js = "var q=document.documentElement.scrollTop=100000"browser.execute_script(js)time.sleep(2)response = browser.page_sourcebrowser.close()return responsedef parse(response):html = etree.HTML(response)products_lis = html.xpath('//li[contains(@class, "gl-item")]')products_list = []for product_li in products_lis:product = {}price = product_li.xpath('./div/div[@class="p-price"]/strong/i/text()')name = product_li.xpath('./div/div[contains(@class, "p-name")]/a/em/text()')comment = product_li.xpath('./div/div[@class="p-commit"]/strong/a/text()')product['price'] = price[0]product['name'] = name[0].strip()product['comment'] = comment[0]products_list.append(product)print(products_list)print(len(products_list))if __name__ == '__main__':keyword = '笔记本电脑'url_login = 'https://passport.jd.com/uc/login?'     # 登录页面urlget_cookie(url_login)for page in range(1, 20, 2):base_url = f'https://search.jd.com/Search?keyword={keyword}&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&pvid=222071d82c0344059f4aac713b1679b4&isList=0&page={page}'response = get_html(base_url)parse(response)

文章参考:python爬虫之使用selenium爬取京东商品信息并把数据保存至mongodb数据库_seleniu获取京东cookie-CSDN博客

 文章到此结束,本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢大家,一起加油吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11-新热文章-实时计算

热点文章-实时计算 1 今日内容 1.1 定时计算与实时计算 1.2 今日内容 kafkaStream 什么是流式计算 kafkaStream概述 kafkaStream入门案例 Springboot集成kafkaStream 实时计算 用户行为发送消息 kafkaStream聚合处理消息 更新文章行为数量 替换热点文章数据 2 实时…

能源照明运作机制与智能调控技术实现途径

随着城市化进程的加速,智慧城市已成为现代城市发展的重要方向。能源照明作为城市基础设施的重要组成部分,其运作机制与智能调控技术的实现对于提高城市能源利用效率、促进可持续发展具有重要意义。 能源照明是一个涵盖广泛、错综复杂的领域,它…

Redis中的集群(一)

集群 概述 Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能 节点 一个Redis集群通常由多个节点(node)组成,在刚开始的时候,每个节点都是相互独立的,它们都…

【优选算法专栏】专题十六:BFS解决最短路问题(二)

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

奇函数+(-)偶函数一定是非奇非偶函数?

今天遇到个有意思的题,跟大家分享一下,可能有的人不太了解: 首先说下结论:这题选D选项,以上均有可能; 开始证明: 非奇非偶函数的充要条件: 定义域是(一a,a)(a>0)或(一 oo,oo)的…

【Linux】软硬链接 / 动静态库

目录 一. 软硬链接1. 硬链接2. 软链接3. unlink4. 目录的硬链接 二. 动静态库1.1 静态库制作1.2 静态库使用2.1 动态库制作2.2 动态库使用3. 动态链接原理 一. 软硬链接 1. 硬链接 硬链接(hard link) 可以将它理解为原始文件的别名, 和原始文件使用相同的 inode 编号和 data …

Mysql底层原理七:InnoDB 行记录

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1)建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…

Blender怎么样启动默认移动和Cavity效果

在使用Blender的过程中,有一些特殊的技巧很重要。 比如默认地设置blender打开时,就是移动物体,这样怎么样设置的呢? 需要在界面里打开下面的菜单: 这样就找到默认设置的地方,把下面的移动勾选起来,这样点…

3.C++ Make

1.Makefile 1.1 什么是 Makefile 一个工程中有很多文件,文件之间都是相辅相成有着编译的先后顺序,但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“,只需一个 make 指令系统就会根据编译顺序帮自己编译文件…

Java-Tomcat

一、web补充技术 ①:B/S架构 主流的方式,只要有浏览器即可。编程方式直接基于socket即可 ②:javascript 简称js,早期只是实现在客户端的浏览器的动态效果,但服务端不会解释运行,所以本质上是静态资源。 …

UE4_动画基础_角色的缩放

以第三人称模板进行制作。 一、首先为角色缩放新建粒子效果 1、新建niagara system,重命名为NS_Shrink。 2、双击打开设置参数: 发射器重命名: Emitter State: 发射器一次喷发数量: 粒子初始大小,生命周…

Go协程池gopool源码解析

1、gopool简介 Repository:https://github.com/bytedance/gopkg/tree/develop/util/gopool gopool is a high-performance goroutine pool which aims to reuse goroutines and limit the number of goroutines. It is an alternative to the go keyword. gopool的…

【Linux进阶之路】地址篇

文章目录 一、ipv4地址1. 基本概念2. 分类3.CIDR4.特殊的ip地址 二、IP协议1. 协议字段2.分片与重组3.路由 三、NAT技术1.公有和私有2.NAT3.NAPT 四、ARP协议1.MAC地址2.ARP 五、DHCP协议六、DNS协议尾序 一、ipv4地址 1. 基本概念 概念:IP地址,英文全…

从零自制docker-8-【构建实现run命令的容器】

文章目录 log "github.com/sirupsen/logrus"args...go moduleimport第三方包失败package和 go import的导入go build . 和go runcli库log.SetFormatter(&log.JSONFormatter{})error和nil的关系cmd.Wait()和cmd.Start()arg……context.Args().Get(0)syscall.Exec和…

【Leetcode每日一题】 递归 - 验证二叉搜索树(难度⭐⭐)(53)

1. 题目解析 题目链接:98. 验证二叉搜索树 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 中序遍历是二叉树遍历中的一种重要方式,它按照左子树、根节点、右子树的顺序访问每个节点。这种方式…

2024mathorcup妈妈杯数学建模A题思路模型

2024mathorcup妈妈杯数学建模A题思路模型:比赛开始后第一时间更新,更新见文末名片,下面对2022年B题进行介绍: 2022Mathorcup B题题目介绍 ​ B题无人仓的搬运机器人调度问题本题考在无人仓内的仓库管理问题之一,搬运机…

机场数据治理系列介绍(5)民用机场智慧能源系统评价体系设计

目录 一、背景 二、体系设计 1、评价体系设计维度 2、评价体系相关约定 3、评价指标体系框架设计 4、能源利用评价指标 5、环境友好评价指标 6、智慧管控评价指标 7、安全保障评价指标 三、具体落地措施 一、背景 在“双碳”国策之下,各类机场将能源系统建…

深入解析template,掌握C++模板的精髓!

掌握C模板(template)的优雅之道! 一、什么是模板?二、模板如何工作?三、C 中的模板类型3.1、 类模板3.2、 函数模板 四、模板参数推导4.1、模板参数推导示例4.2、函数模板参数推导4.3、类模板参数推导(C17 …

2024年MathorCup妈妈杯数学建模思路C题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享,点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间:2024年4月11日(周四)12:00 比赛开始时间:2024年4月12日(周五)8:00 比赛结束时间&…

GPU部署ChatGLM3

首先,检查一下自己的电脑有没有CUDA环境,没有的话,去安装一个。我的电脑是4060显卡,买回来就自带这些环境了。没有显卡的话,也不要紧,这个懒人安装包支持CPU运行,会自动识别没有GPU,…