Selenium技巧大揭秘:动态数据、分页和Cookie的获取利器

news2024/11/18 8:34:58

背景:

​ 昨天我们讲了讲关于seleium的一些基础操作,今天讲讲如何将seleium和爬虫结合起来,可以使用selenium获取网页的动态加载数据,可以使用selenium获得cookie,这两个是比较常用的。我将一一展开。

实战案例:

获取XHR动态加载数据:

思考:在爬虫中为什么需要使用selenium?selenium和爬虫之间的关联是什么?

  • 便捷的爬取动态加载数据(可见即可得)

我发现大家对动态加载数据和请求包中的数据没有一个特别清晰的认识。

selenium获得网页数据是经过多个数据包发送请求共同渲染后的数据,上图片:

在这里插入图片描述

记住这个元素页面是有多个网络请求共同整合出来的数据,即下面网络请求数据包加载渲染后的:

在这里插入图片描述

要求:https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action= 解析其相关数据,电影名等等。

from selenium import webdriver
from time import sleep
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
path = r'D:\Downloads\xx\chromedriver-win64\chromedriver.exe'
url='https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action='
driver = webdriver.Chrome(executable_path=path)

driver.get(url)
sleep(5)
print(driver.page_source)

在这里插入图片描述

如上图,我们获取的一定是渲染加载完成后的数据,接下来对网页源码数据进行解析即可。如果想获取全部,大家就注入js脚本使用selenium让其不断向下滑动即可。

获取分页数据:

​ 这个案例是之前写的,可能代码以已经失效了,但是爬虫学习学的一定是思路,不是代码,在当前这个大时代,会用chatgpt的程序员才不会被淘汰。

要求:获取前5页的企业名称

实现思路:将每一页源码数据存到一个列表中,最后对列表中的每一项进行数据解析即可,获得首页源码数据后,使用selenium对下一页进行点击,然后不断循环。

#获取前5页的企业名称
from selenium import webdriver
import time
from lxml import etree

bro = webdriver.Chrome(executable_path='./chromedriver')
url = 'http://scxk.nmpa.gov.cn:81/xk/'
bro.get(url=url)
time.sleep(2)
#获取页面源码数据(page_source)
page_text = bro.page_source
#将前5页的页面源码数据存储到该列表中
all_page_text_list = [page_text]
for i in range(4):
    #找到下一页标签
    next_page_btn = bro.find_element_by_xpath('//*[@id="pageIto_next"]')
    # 点击
    next_page_btn.click()
    #等待几秒 使得网站数据能够加载出来
    time.sleep(2)
    #将当前页源码数据放入总列表
    all_page_text_list.append(bro.page_source)

for page_text in all_page_text_list:
    #解析数据
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="gzlist"]/li')
    for li in li_list:
        # 这里得到 ./  .代表在上面的路径的基础上
        title = li.xpath('./dl/@title')[0]
        print(title)
time.sleep(2)
bro.quit()
Cookie:

使用Selenium,还可以方便地对Cookies进行操作,例如常见的获取Cookies,示例如下:

  • get_cookies()返回值是由字典组成的列表,叫做jsonCookies。
  • 需要将jsonCookies解析成浏览器携带的cookie形式
  • 这个返回的是相应请求相应回来的cookie
path = r'D:\Downloads\xx\chromedriver-win64\chromedriver.exe'
browser = webdriver.Chrome(executable_path=path)
browser.get('https://www.zhihu.com/explore')
# 获取cookie jsonhuke
cookies = browser.get_cookies()# 返回的是一个列表
print(cookies,type(cookies))
# 解析cookie
dic = {}
for cookie in cookies:
    key = cookie['name']
    value = cookie['value']
    dic[key] = value
    print(key,value)
print(dic)  # 在爬虫中可以使用的cookie
browser.close()

在这里插入图片描述

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

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

相关文章

SAP Smartforms打印报错Error in spool C call : spool overflow

处理方式: SAP打印时提示: Error in spool C call : spool overflow (假脱机请求溢出,通俗一点打印池已满) 解决办法: SE38 首先运行程序RSPO1041 再运行RSPO1043,话不多说上图。

2023-11-24 LeetCode每日一题(统计和小于目标的下标对数目)

2023-11-24每日一题 一、题目编号 2824. 统计和小于目标的下标对数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target &#xff0c;请你返回满足 0 < i < j < n 且 nums[i] nums[j] < targe…

千梦网创:我回来了

最近小半年将近有5个月的时间基本没有更新什么大型的课程内容&#xff0c;朋友圈除了晨记没有频繁更新一些公告或者是动态&#xff0c;直到目前为止&#xff0c;我也才算把手头所有的事情全部梳理好&#xff0c;正式恢复更新状态。 这小半年发生了很多事情&#xff0c;有快乐的…

【数字图像处理】均值滤波与中值滤波

在数字图像处理中,均值滤波和中值滤波是常见的空间域处理方法,可以用于过滤图像中的噪声。本文主要介绍数字图像均值滤波与中值滤波的基本原理,并记录在紫光同创 PGL22G FPGA 平台的布署与实现过程。 目录 1. 均值滤波与中值滤波 2. FPGA 布署与实现 2.1 功能与指标定义

NX二次开发UF_CURVE_ask_int_parms 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms Defined in: uf_curve.h int UF_CURVE_ask_int_parms(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_objects_set_…

excel一个单元格换行方法

要是在同一个单元格内输入文字输入不下的话&#xff0c;我们是可以进行同一个单元格换行设置的&#xff0c;而且换行的方法也是有很多种&#xff0c;下面我们就一起来看一下有哪些方法吧。 excel一个单元格换行方法&#xff1a; 方法一&#xff1a; 1、我们可以直接按下alte…

2-10岁女童穿搭 I 看的见的时尚感

分享女儿的时尚穿搭—连帽加绒卫衣 简单易搭怎么穿都好看的卫衣 红色吸睛又显肤色&#xff0c;不挑人穿 面料亲肤柔软&#xff0c;保暖性也很棒 单穿内搭都能轻松打造时尚造型&#xff01;&#xff01;

bop数据合并到COCO

bop数据合并到COCO JSON转TXT重命名txt文件中类别信息的转换 JSON转TXT import json import os,globcategories [{"id": 12,"name": "OREO","supercategory": "icbin"},{"id": 16,"name": "Paper…

Tdlib make 卡住

在VM下&#xff0c;用debian编译Tdlib不成功&#xff0c;分析出Tdlib编译会消耗大量的CPU和内存 解决方案&#xff1a;1.增加硬件配置 2.参考 zelenin/go-tdlib: Go wrapper for TDLib (Telegram Database Library) (github.com) 这里参考2&#xff1a;通过说明文件&#xff0…

基于斑马算法优化概率神经网络PNN的分类预测 - 附代码

基于斑马算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于斑马算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于斑马优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

C语言 - 基础

C 语言 1. Hello World #include <stdio.h>int main(int argc, const char *argv[]) {printf("hello world\n");return 0; }注意: 所有的标点符号必须在英文状态下输入单词不要写错注意空格 创建 C语言 程序步骤&#xff1a; 1、创建一个文档&#xff0c;以…

【MinIO】几个有用的方法

在windows总安装Minio 这是一篇不错的安装指南 进入网址 在Windows安装时&#xff0c;选择相应的exe文件下载&#xff0c;下载到本地后&#xff0c;使用如下的命令即可在前台启动&#xff1a; minio.exe server D:\your_path 或者将该路径写进环境变量的path中&#xff0c;…

新手如何买卖基金,基金投资基础入门

一、教程描述 本套基金教程&#xff0c;大小2.50G&#xff0c;共有13个文件。 二、教程目录 第01课&#xff1a;基金入门&#xff0c;学会投资其实不难.mp4 第02课&#xff1a;基金分类&#xff0c;琳琅满目清清楚楚.mp4 第03课&#xff1a;以稳取胜&#xff0c;稳健基金稳…

CSS水平居中与垂直居中的方法

当我们页面布局的时候&#xff0c;通常需要把某一个元素居中&#xff0c;这一篇文章为大家介绍一下居中的几种方法&#xff0c;本人文笔有限&#xff0c;请见谅&#xff01; 一.水平居中 行内元素水平居中的方法&#xff0c;我们使用text-align:center; <!DOCTYPE html&g…

市场被套牢,没有了解积累和分配,昂首资本一一介绍

很多投资者对市场中的积累和分配的概念不是很清楚&#xff0c;下面昂首资本将一一介绍。 积累意味着尽可能多地买入筹码&#xff0c;而不大幅抬高价格&#xff0c;直到在你买入时的价格水平上没有或几乎没有筹码。这种买入通常发生在市场熊市之后&#xff0c;此时有最佳买入价…

枚举与应用

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 枚举简介 枚举是一种特…

软件测试:超详细的Jmeter基础教程

JMeter 介绍&#xff1a; 一个非常优秀的开源的性能测试工具。 优点&#xff1a;你用着用着就会发现它的重多优点&#xff0c;当然不足点也会呈现出来。 从性能工具的原理划分 Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4个部分&#xff1a; &#xff…

是否有无限提取的代理IP?作为技术你需要知道这些

最近有互联网行业的技术小伙伴问到&#xff0c;有没有可以无限提取的代理IP&#xff1f;就是比如我一秒钟提取几万、几十万次&#xff0c;或者很多台机器同时调用API提取链接&#xff0c;这样可以吗&#xff1f;看到这个问题&#xff0c;不禁沉思起来&#xff0c;其实理论上是存…

数据结构与算法编程题23

设计二叉树的双序遍历算法&#xff08;双序遍历是指对于二叉树的每一个结点来说&#xff0c;先访问这个结点&#xff0c;再按双序遍历它的左子树&#xff0c;然后再一次访问这个结点&#xff0c;接下来按双序遍历它的右子树&#xff09; #define _CRT_SECURE_NO_WARNINGS#inclu…