自动化测试(一):网页结构分析与Google翻译2023.7.18爬虫实例

news2024/11/27 0:18:18

目录

  • 1. 网页分析
    • 1.1 静态网页
    • 1.2 静态网页的爬取案例
    • 1.3 动态网页
    • 1.4 Google翻译2023.7.18爬虫实例
      • 1.4.1 基于网页分析的Google翻译2023.7.18爬虫实例
      • 1.4.2 基于Selenium的Google翻译2023.7.18爬虫实例

1. 网页分析

  网页分析即通过检查元素,确定想提取的内容的区域位置,以便后面通过标签id,name,class或其它属性提取内容。网页类型包括静态网页和动态网页:

  • 静态网页的指数据直接存储在网页的 html 中,不论用户是否请求了数据,数据就 “静止” 在那里。
  • 动态网页的数据则被 “藏” 起来了,用户每次请求后,动态网页才会有一个向远程数据库请求数据的“动作”,再把数据显示出来,但用户无法直接从网页的 html 中获取数据。

  对于静态网页,浏览器右键“查看网页源代码”,这里能看到的就是GET能直接得到的HTML内容。从源代码看,静态网页的数据直接存在网页的源代码中,动态网页的数据不会出现在网页源代码中。从网址特征看,静态网页的数据不会 “动”,所以一个页面就是一个网址,翻页时网址会变化。动态网页自己会 “动”,所以哪怕请求新的数据 ,网址也不会变化。比如谷歌翻译每一次输入新的词汇。

网页主要有以下几种代码格式,这些格式通常一起使用,组成了现代网页的基本结构:

  1. HTML(Hypertext Markup Language):HTML是一种标记语言,用于创建网页的结构和内容。它使用标签(例如、、)来定义网页的不同部分,包括文本、图像、链接等。
  2. CSS(Cascading Style Sheets):CSS是一种样式表语言,用于控制网页的外观和布局。它定义了网页元素的样式、字体、颜色、大小、位置等属性,使网页能够呈现出所需的视觉效果。
  3. JavaScript:JavaScript是一种脚本语言,用于实现网页的交互和动态功能。通过JavaScript,可以对网页进行操作、响应用户的交互,以及动态地更新网页内容。
  4. JSON(JavaScript Object Notation):JSON是一种轻量级的数据交换格式,常用于在客户端和服务器之间传输数据。虽然它不是网页的格式,但在Web开发中经常用于通过API或AJAX技术获取和交换数据。

1.1 静态网页

  静态网页的内容一般以HTML格式返回数据。请求静态网页时,服务器将返回包含HTML代码的响应,其中包含网页的各种元素,如文本、图像、链接等。解析静态网页可以使用HTML解析器(如BeautifulSoup)来解析HTML代码,并提取所需的数据或操作网页的各种元素。通常,静态网页的内容不以JSON格式返回数据,因为JSON主要用于传输结构化数据而不是网页内容的表示。
  需要注意的是,有些网站可能会在静态网页中嵌入JSON数据,以便在前端JavaScript代码中使用。在这种情况下,您可能需要查找嵌入的JSON数据并提取所需的内容。

  通过在静态网页中嵌入JSON数据,前端开发人员可以在网页加载时获取和操作数据,避免每次都向后端发送请求获取数据,从而提高网页的性能和响应速度。同时,通过使用JSON格式,数据可以以结构化的方式传输和交换,便于前端JavaScript代码解析、提取并使用嵌入的JSON数据。

1.2 静态网页的爬取案例

import requests
from bs4 import BeautifulSoup

url = "https://lianxh.cn/news/63ffc529caf31.html"
headers = {
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67'
}
r = requests.get(url=url, headers=headers) # print(r.text)结果即静态网页源代码
soup = BeautifulSoup(r.content, 'html.parser')
# 在这里可以使用BeautifulSoup提供的方法来提取网页内容
# 例如:soup.find('div', {'class': 'content'}) 查找具有class为'content'的<div>标签

# 打印网页标题
print(soup.title.string)

网页https://lianxh.cn/news/63ffc529caf31.html标题输出结果为:

Python爬取静态网站:以历史天气为例| 连享会主页 

1.3 动态网页

  动态网页的数据往往根据用户请求进行响应后获得,无法直接从网页的 html 中直接获取。点击右键“查看网页源代码”,会发现有一部分网页上显示的内容,源代码里面没有对应的数据,而这部分就是通过ajax异步加载出来的。就比如CSDN的评论:

Fig.1 评论区元素中看不到对应的评论数据Fig.2 但实际却是有一条评论

想要爬取这部分数据,需要分析出来加载动态网页的url。

  想要爬取动态网站,第一步需要利用开发人员工具进行元素审查。

Fig.3 开发人员工具
Fig.4 开发工具常用模块介绍

元素(ELements):查看网页页面的所有元素。用于查看修改元素的属性、CSS 属性、监听事件以及断点等等。
控制台(Console):开发人员进行Web开发和调试的工具。例如使用控制台输出调试信息、日志消息和其他自定义消息。执行 JS 语句。显示网页加载过程中的网络请求,包括请求的URL、响应状态、响应头、请求时间等信息。
源代码(Sources):用于查看和编辑网页的HTML、CSS和JavaScript代码。
网络(Network):用于监视和分析网页加载过程中的网络请求和响应。
在这里插入图片描述
在网络面板上,Fetch/XHR、JS、CSS、Img等URL筛选是用于过滤和筛选特定类型的网络请求的选项。

  • Fetch/XHR:用于筛选XMLHttpRequest(XHR)和Fetch API发送的网络请求,这些请求通常用于通过JavaScript进行数据交互和异步加载。
  • JS:用于筛选JavaScript文件的网络请求,包括网页中引入的外部JavaScript文件、内联的JavaScript代码等。
  • CSS:用于筛选CSS文件的网络请求,包括外部CSS文件和内联样式。
  • Img:用于筛选图像文件(如JPEG、PNG、GIF等)的网络请求,包括通过 <img> \text{<img>} <img>标签加载的图像。

开发者工具可以用于:复制不可复制的文字、下载不能保存的图片、编辑页面上的任何文本、爬虫时审查元素等。

1.4 Google翻译2023.7.18爬虫实例

PS:我知道可以利用Google Cloud Translation API进行翻译,但这里是为了演示爬虫。

1.4.1 基于网页分析的Google翻译2023.7.18爬虫实例

参考流程:https://blog.csdn.net/cnds123321/article/details/103321859
参考代码:https://github.com/lushan88a/google_trans_new

1.4.2 基于Selenium的Google翻译2023.7.18爬虫实例

  简单高效的抓取动态网页内容用动态网页抓取神器:Selenium

比如,常见反爬手段可粗略分为五大类:

  • headers 字段:User-Agent、referer、cookie
  • IP 地址
  • js:js 实现跳转、js 生成请求参数或数据加密
  • 验证码
  • 其他:自定义字体(比如:猫眼电影)、CSS像素偏移(比如:去哪儿网)

而对于用户来说,既然你有「盾」护,那就只能以锋「矛」应对了。反反爬的主要思路是尽可能地模拟浏览器,浏览器如何操作,代码中就如何实现。所以反爬与反反爬其实就处于「动态博弈」之中。

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

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

相关文章

pyright 的配置方法

珍惜发量,拥抱python&#x1f602; 可以很快的构建一个平台管理程序,嵌入式设备,芯片厂商&#xff0c;都是python 的示例代码了 Lua 真的很棒&#xff0c;值得嵌入式领域的推广 实时性要求不高的&#xff0c;嵌入式设备,可以考虑lua python PC 的程序 ,python/Rust/C &#xf…

波奇学Linux:冯诺依曼和进程

现代计算机大多是冯诺依曼体系结构&#xff0c;这是一种硬件结构&#xff0c;规定了设备组成和设备类型。 存储器:内存&#xff0c;磁盘/U盘是外存是输入输出设备。 输入设备&#xff1a;键盘/磁盘/摄像头/话筒/网卡 输出设备&#xff1a;显示器&#xff0c;播放器硬件&#…

Spring6 初始

Spring6 初始 文章目录 Spring6 初始每博一文案:1. 初始 Spring61.1 OCP开闭原则1.2 依赖倒置原则DIP1.3 控制反转IoC 2. Spring 初始2.1 Spring特点2.2 Spring6 的下载&#xff1a;2.3 Spring的jar文件 3. 第一个Spring 程序的编写4. 第一个Spring程序详细剖析4.1 bean标签的i…

SQL28 计算用户8月每天的练题数量

select day(date) as day,count(question_id) from question_practice_detail where month(date)8 and year(date)2021 group by date

C语言如何计算结构体大小(结构体的内存对齐)

前言&#xff1a; 结构体的内存对齐是有关结构体内容的很重要一个知识点&#xff0c;主要考察方式是计算结构体的字节大小。 引言&#xff1a; 当我们对计算结构体一无所知&#xff0c;我们不妨自己思索如何计算&#xff0c;是不是直接计算结构体成员变量占用内存的大小呢&a…

共享与协作:时下最热门的企业共享网盘推荐!

现代企业面临着越来越大的数据存储和共享压力。为了提高公司的生产力和效率&#xff0c;许多企业开始寻找共享网盘解决方案。这些共享网盘平台可以帮助企业集中管理文件和数据&#xff0c;并方便快速地与同事、客户或供应商共享。以下是几款好用的企业共享网盘。 Zoho Workdriv…

Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为3675字&#xff0c;预计阅读12分钟 前言 接上篇《Android BlueToothBLE入门&#xff08;二&#xff09;——设备的连接和通讯&#xff08;附Demo源码地址&#xff09;》最后提到过蓝牙BLE通讯每次默认发送…

qt 32位编译 内存溢出 无法 运行在win7 32位

项目在 编译32位系统 内存溢出 设置成了x64 但是 最后在xp32位系统运行提示 在下载了n个dll之后发现这种状况无穷无尽&#xff0c;后来在查阅资料时发现可以直接打开qt安装目录下的“vcredist”文件夹&#xff0c;将对应位数的程序拷到win7电脑上&#xff0c;直接运行&…

优化营商环境:构建智能营销平台,助力企业经营发展

对于企业来说&#xff0c;没有了客户&#xff0c;就像身体没有了血液&#xff0c;将失去生命力和活力&#xff0c;续存难发展更难。区域产业又是由一个个企业集聚而形成&#xff0c;企业的成败也就决定着区域产业的兴衰。 在当今竞争激烈的商业环境中&#xff0c;传统的销售手段…

基于python的爬虫实现

定义 爬虫&#xff08;Web crawler&#xff09;&#xff0c;也被称为网络爬虫、网络蜘蛛或网络机器人&#xff0c;是一种自动化程序&#xff0c;用于浏览互联网并收集网页内容。 基本原理 爬虫的工作原理是通过发送HTTP请求从网页服务器获取网页的内容&#xff0c;然后解析网…

何时使用Windbg静态分析?何时使用Windbg动态调试?

目录 1、概述 2、使用Windbg静态分析dump文件 2.1、异常捕获模块自动生成dump文件 2.2、从Windows任务管理器中导出dump文件 2.3、从正在动态调试的Windbg中使用命令导出dump文件 2.4、使用Windbg静态分析dump文件的一般步骤 3、使用Windbg动态调试目标进程 3.1、程序发…

Win10 配置NDK安装2023.7.19版本

NDK安装流程 1. 下载&#xff1a;2. 安装&#xff1a;3. 测试&#xff1a; 在大多数情况下&#xff0c;使用 Android SDK 管理器安装 NDK 会更轻松。本文单独安装NDK&#xff0c;但后续也可以使用管理器进行管理。 1. 下载&#xff1a; 地址 Fig.1 最新稳定版本 2. 安装&…

精益生产的五大管理工具:提升效率,降低成本!

在制造业的世界里&#xff0c;精益生产是一种以追求在制造过程的各个方面减少浪费为中心的方法。为了实现这一目标&#xff0c;有几个经常使用的管理工具。这些工具使制造商能够识别和消除生产过程中任何效率低下或浪费的资源。本文将讨论精益生产中使用的一些关键管理工具&…

Android 进程与进程之间的通信--Messager 详细教程,两个app实现

Messenger是一种轻量级的IPC方案,它的底层实现其实就是AIDL.跨进程通信使用Messenger时,Messenger会将所有服务调用加入队列,然后服务端那边一次处理一个调用,不会存在同时调用的情况.而AIDL则可能是多个调用同时执行,必须处理多线程问 步骤详情 一、服务端 public class MyM…

如何使用DiskPart命令行格式化分区?

想要格式化磁盘分区&#xff0c;您可以使用磁盘管理工具&#xff0c;或在Windows文件资源管理器中右键单击驱动器并选择“格式化”。如果您更想使用命令行来格式化磁盘&#xff0c;那么Windows自带的DiskPart将是首选。 DiskPart有很多优点&#xff0c;例如&#xff0c;如果您想…

《无畏契约》游戏分析

文章目录 介绍游戏继承性《守望先锋》游戏美术对比游戏机制对比 《CSGO》游戏美术对比游戏机制对比 《英雄联盟》游戏美术对比游戏机制对比 《无畏契约》的优点《无畏契约》的缺点该游戏值得学习之处总结 介绍 《无畏契约&#xff08;VALORANT&#xff09;》是一款由拳头游戏&…

Vue组件的基本使用

Vue中想用组件总共分几步&#xff1a; 1.创建组件 2.注册组件 3.使用组件 1.创建组件 //1.创建school组件&#xff0c;这里的school并不是组件名&#xff0c;只是一个中转变量名const school Vue.extend({// el:#root, //组件定时&#xff0c;一定不要写el配置项&#xff0…

[python][深度学习]diffusers加载模型每次都联网如何离线加载

diffusers模块很好用&#xff0c;唯一缺点就是没把离线加载模型做好。一般都是联网自动下载后&#xff0c;以后离线加载一下就行了&#xff0c;没想到每次都远程下载一堆东西而且经常容易断网。因此研究离线加载势在必行&#xff0c;经过N次下载之后终于成功下载模型 下载后发现…

【电路原理学习笔记】第5章:串联电路:5.1 电阻的串联

第5章&#xff1a;串联电路 5.1 电阻的串联 图5-1a展示了申联于A点和B点之间的2个电阻。图5-1b和图5-1c分别展示了3和4个电阻相串联的情况。当然&#xff0c;串联电路中可以有任意数量的电阻。 对于图51所示各电路&#xff0c;当电压源连接在A点和B点之间时&#xff0c;电流…

【数据结构】链表及无头单向非循环链表实现

目录 1.顺序表的问题 2.链表的概念、结构及分类 3.无头单向非循环链表实现 3.1创建节点 3.2头插数据 3.3头删数据 3.4尾插 3.5尾删 3.6链表销毁 3.7查找一个元素 3.8在pos之前插入 3.9在pos之后插入 3.10删除pos位置 3.11删除pos之后的位置 1.顺序表的问题 顺…