爬虫——ajax和selenuim总结

news2024/11/30 12:35:02

为什么要写这个博客呢,这个代码前面其实都有,就是结束了。明天搞个qq登录,这个就结束了。

当然也会更新小说爬取,和百度翻译,百度小姐姐的爬取,的对比爬取。总结嘛!!!加油!!!

============================ajax====================================

,有时爬不到东西,可能是经过Ajax加载的数据,不是原始的HTML文档。

这样我们就要来模拟Ajax请求。

上实例:比如说我前几篇的,异步社区的爬取。

    response = requests.get(url,headers=hearder,params=params).text

用的不光有url,headers,还有params,params中是对页数等的请求。

得到的是字典样子的数据,但是是字符串。

这就要用到json.loads(),来把字符串类型,转化为python的字典类型了 

-----------------得到字典就是取值了。

同一个网站不用,params,就不会请求成功。



selenuim---用浏览器实现自动化(很强大的反爬工具)。

    有些网站可能会有JavaScript动态加载数据,这种情况下,简单的获取初始HTML可能无法获取

这时就是用selenuim来模拟浏览器。


来复习一便selenuim自动化吧!!!-下一篇就是登录自动qq(目标)

第一篇代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Edge()

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')
#寻找(异常的捕获)
try:
    element = wd.find_element(By.ID,'kw')
    element.send_keys('通讯')

    caozuo = wd.find_element(By.ID,'su')
    caozuo.click()#点击
    
    wd.quit()#退出
    input('等待回车键结束程序')

except NoSuchElementException:
    print('不存在')


1.导库-最后一个是异常

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

2.这里try是如果抛出异常,就咋咋咋!

3. wd.find-element(),caozuo.click()-------------------------很重要


                      ---------------------二-------------------------------

第二篇代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

url = 'https://cdn2.byhy.net/files/selenium/sample1.html'
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Edge()

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get(url)
#根据ID查找
id_element = wd.find_element(By.ID,'searchtext')
id_element.send_keys('haha')
input("jix1")
#根据class的名字查找++
elements = wd.find_elements(By.CLASS_NAME,'plant')
for i in elements:
    print(i.text)
#根据标签查找
all_elements = wd.find_elements(By.TAG_NAME,'span')
for i in all_elements:
    print(i.text)
#退出
wd.quit()




很简单和第一个差不多,就是变成了,找一个(element),变成了找所有(elements)


 ----------------------------------三-----------------------------------------------

第三篇代码:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

url = 'https://im.qq.com/index/'


wd = webdriver.Edge()
wd.implicitly_wait(10)

wd.get(url)

elements = wd.find_element(By.NAME,'im.qq.com.login')
elements.click()
time.sleep(1)
element =  wd.find_element(By.ID,'bottom_qlogin')
time.sleep(1)
element2 = wd.find_element(By.ID,'switcher_plogin')
time.sleep(1)
element2.click()
time.sleep(2)
wd.quit()






这个也没啥就是-----wd.implicitly_wait(10)------因为爬取要时间,相当一个等待的代码。


------------------------------四-------------------------------

第四篇代码:

frame窗口转换

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

url = "https://cdn2.byhy.net/files/selenium/sample2.html"
wd = webdriver.Edge()
wd.implicitly_wait(10)

wd.get(url)
#切换到内frame里面
wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR,'[src="sample1.html"]'))
elements = wd.find_elements(By.CSS_SELECTOR,'.plant')
for i in elements:
    print(i.get_attribute('outerHTML'))
#切换到外部
wd.switch_to.default_content()
wd.find_element(By.CSS_SELECTOR,'#outerbutton')
print(wd.find_element(By.CSS_SELECTOR,'#outerbutton').get_attribute('outerHTML'))
wd.find_element(By.CSS_SELECTOR,'#outerbutton').click()
time.sleep(2)
wd.quit()
input("jj")

这个很重要,加入了CSS,CSS也就是选择器,很强大。

1.wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR,'[src="sample1.html"]'))

找么有‘ID’或者‘Class’的,并且进入frame窗口

2.print(i.get_attribute('outerHTML'))——这个将会打印标签在HTML是什么样的,打印出来就是什么样的

3.wd.switch_to.default_content()————返回到外部窗口


-------------------------------------------五-------------------------------------------

第五篇代码:

浏览器窗口的变化

import time
from selenium  import webdriver
from selenium.webdriver.common.by import By

url = "https://cdn2.byhy.net/files/selenium/sample3.html"
wd = webdriver.Edge()
wd.implicitly_wait(10)

wd.get(url)

element = wd.find_element(By.CSS_SELECTOR,'a')

print(element.get_attribute('outerHTML'))
element.click()
#存储下来
mainWindow = wd.current_window_handle

time.sleep(5)

for handle in wd.window_handles:
    wd.switch_to.window(handle)
    print(wd.title)
    if '必应' in wd.title:
        break

wd.find_element(By.CSS_SELECTOR,'#sb_form_q').send_keys("hahahah")
time.sleep(1)
wd.find_element(By.CSS_SELECTOR,'#search_icon').click()

time.sleep(5)
#返回窗口
wd.switch_to.window(mainWindow)

wd.find_element(By.CSS_SELECTOR,'button').click()
wd.find_element(By.CSS_SELECTOR,'button').click()
time.sleep(5)

wd.quit()

1.mainWindow = wd.current_window_handle-这个很有必要,就是存储当前窗口,以便返回。

2.

for handle in wd.window_handles:
    wd.switch_to.window(handle)
    print(wd.title)
    if '必应' in wd.title:
        break

在目前浏览器窗口找,有必应两个字的窗口。并转到


为什么要写这个博客呢,这个代码前面其实都有,就是结束了。明天搞个qq登录,这个就结束了。

当然也会更新小说爬取,和百度翻译,百度小姐姐的爬取,的对比爬取。总结嘛!!!加油!!!


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

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

相关文章

智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码) 源码设计 %%%% clear all clc SearchAgents_no=100; % Number of search ag

深入浅出解析指针:从概念到实践

在编程的世界中,指针是一个非常重要且强大的工具。无论你是初学者还是经验丰富的开发者,理解并熟练使用指针都将极大地提升你的编程能力。今天,我们就来一起探讨指针的奥秘。 一、指针的基本概念 首先,我们需要明白,…

C++进阶(十六)特殊类设计

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、请设计一个类,不能被拷贝二、请设计一个类,只能在堆上创建对象三、…

从零开始:Linux下的Miniconda安装教程

🚀从零开始:Linux下的Miniconda安装教程🚀 🌵文章目录🌵 🌳引言🌳🌳二、Miniconda简介:开启您的数据科学之旅的得力助手! 🌳🌳三、Lin…

【前沿技术杂谈:迁移学习】欧洲人工智能法案对人工智能开发者的意义 [2023 年 12 月更新]

【前沿技术杂谈:迁移学习】欧洲人工智能法案对人工智能开发者的意义 [2023 年 12 月更新] 定义、一般原则和禁止做法人工智能系统开发者基于风险的义务固定和通用人工智能开发人员(第 3/28 条)基础模型的提供者(第 28b…

C++入门篇——类与对象重点解析(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public: Date(int year, int month, int day) {_year year;_month month;_day day; } private:int _year;int _m…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

全国计算机等级考试二级,MySQL数据库考试大纲(2023年版)

基本要求: 1.掌握数据库的基本概念和方法。 2.熟练掌握MySQL的安装与配置。 3.熟练掌握MySQL平台下使用SQL语言实现数据库的交互操作。 4.熟练掌握 MySQL的数据库编程。 5.熟悉 PHP 应用开发语言,初步具备利用该语言进…

下一代块存储重新定义任务关键型存储架构

HPE 宣布全面推出基于 HPE Alletra Storage MP 构建的 HPE GreenLake for Block Storage 第 3 版,提供业界首款分解式横向扩展块存储,并提供 100% 数据可用性保证。这种独特的块存储产品由共享一切存储架构提供支持,并通过 HPE GreenLake 云平…

OCP的operator——(1)概述

文章目录 概述了解Operator什么是Operator为何使用OperatorOperator FrameworkOperator成熟度模型 Operator Framework 打包格式Bundle格式Manifest注解依赖关于opm CLI 基于文件的目录RukPak Operator Framework常用术语表常见Operator Framework术语BundleBundle imageCatalo…

腾讯云4核8G服务器能支持多少人访问?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

Java+SpringBoot+Vue:高校科研管理的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

ubuntu22.04@laptop OpenCV Get Started: 007_color_spaces

ubuntu22.04laptop OpenCV Get Started: 007_color_spaces 1. 源由2. 颜色空间2.1 RGB颜色空间2.2 LAB颜色空间2.3 YCrCb颜色空间2.4 HSV颜色空间 3 代码工程结构3.1 C应用Demo3.2 Python应用Demo 4. 重点分析4.1 interactive_color_detect4.2 interactive_color_segment4.3 da…

docker 2:安装

docker 2:安装 ‍ ubuntu 安装 docker sudo apt install docker.io‍ 把当前用户放进 docker 用户组,避免每次运行 docker 命都要使用 sudo​ 或者 root​ 权限。 sudo usermod -aG docker $USER​id $USER ​看到用户已加入 docker 组 ​​ ‍ …

【深度学习】S2 数学基础 P1 线性代数(上)

目录 基本数学对象标量与变量向量矩阵张量降维求和非降维求和累计求和 点积与向量积点积矩阵-向量积矩阵-矩阵乘法 深度学习的三大数学基础 —— 线性代数、微积分、概率论; 自本篇博文以下几遍博文,将对这三大数学基础进行重点提炼。 本节博文将介绍线…

LeetCode、72. 编辑距离【中等,二维DP】

文章目录 前言LeetCode、72. 编辑距离【中等,二维DP】题目链接与分类二维DP 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容…

C++笔记1:操纵符输入输出

C操纵符用来控制输出控制,一是输出的形式,二是控制补白的数量和位置。本文记录一下,在一些笔试的ACM模式可能有用。其中1-4节的部分是关于格式化输入输出操作,5-6节的部分是关于未格式化输入输出操作。 1. 控制布尔值的格式 一般…

嵌入式Qt 计算器界面设计

一.计算器界面设计 计算机界面程序分析&#xff1a; 需要用到的组件&#xff1a; 界面设计&#xff1a; 界面设计实现&#xff1a; 实验1&#xff1a;计算器界面设计 #include <QtGui/QApplication> #include <QWidget> //主窗口 #include <QLineEdit> //文…

医院排队叫号系统的设计与实践

随着医疗服务需求的增加&#xff0c;医院排队叫号系统成为了现代医院管理的必备工具。它不仅可以提高医院服务效率&#xff0c;减少患者等待时间&#xff0c;还可以优化医院资源利用&#xff0c;提升患者就诊体验。本文将介绍医院排队叫号系统的设计与实践&#xff0c;包括系统…