python实操之网络爬虫介绍

一、什么是网络爬虫

网络爬虫,也可以叫做网络数据采集更容易理解。它是指通过编程向网络服务器(web)请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。 它包括了根据url获取HTML数据、解析HTML,获取目标信息、存储数据几个步骤;过程中可能会涉及到数据库、网络服务器、HTTP协议、HTML、数据科学、网络安全、图像处理等非常多的内容。是不是觉得太复杂了,不用担心,对于初学者来说,并不需要全部掌握。

二、为什么需要爬虫

 经常会遇到这一类网页,登录进去后,可以查看到很多有用的数据,但是网页无导出功能,想要下载这部分数据,通常只能手动一点一点去复制,这种方式不仅复制的时候,再粘贴到表格中格式会混乱,要花时间去慢慢调整;其次如果有很多页的数据,还得一页一页翻页复制,其麻烦程度 可想而知。。。

   此时,了解一下python的爬虫,动手write一下,释放生产力。关于爬虫有很多使用的场景,也有很多可以去使用的模块,可以根据具体系统架构和爬取内容情况来适配使用。

三、测试用例

  这里以自己的一个测试系统为例,目标链接有个主机信息的表,但是前提需要登录后才能访问,并且也存在分页的情况,要求是后台获取的内容直接以excel形式保存展示。

四、测试过程

这个简单实例里,主要使用到3个基础模块:

requests:构建请求的相关动作,例如传递登录信息,调测目标网址,保存登录cookie等内容

BeautifulSoup:对获取到html文本内容进行解析,查找里面的表格内容

pandas:对解析后内容,用来存储到目标excel

通常在爬取具体内容数据时,先可以通过F12,查看下网页的源代码,了解下网页的结构,从而设计自己的脚本,上述例子的网页,只是个简单html内容页,有基础的表格属性内容,例如table、tr元素,所以只需要针对这些属性内容,直接匹配获取相应的值即可。

直接上脚本,有相关注释内容,如果有类似场景的可直接用

import requests
from bs4 import BeautifulSoup
import pandas as pd#构建缓存登录的session
url = 'http://XXX.XXX.XXX.XXX:5000/auth/login'
username = 'XXXX'
password = 'XXXX'
# 创建一个session,作用会自动保存cookie
session = requests.session()
data = {'username': username,'password': password
}
# 使用session发起post请求来获取登录后的cookie,cookie已经存在session中
response = session.post(url = url,data=data)#提前创建个空列表来存储数据,方便后面写入excel
data = []###构建目标网页的请求,存在分页的情况,写个循环
url = 'http://192.168.163.134:5000/query/inventory?page={}'
for i in range(1, 5):url2 = url.format(i)html_content = session.get(url=url2).text#print(html_content)#对获取到html使用BeautifulSoup库解析HTML内容soup = BeautifulSoup(html_content, 'html.parser') # 查找解析后表格元素table = soup.find('table') # 获取所有行rows = table.find_all('tr')# 遍历所有行,并将每行的所有单元格的文本添加到data列表中for row in rows:cells = row.find_all('td')if len(cells) > 1:row_data = [cell.text.strip() for cell in cells]data.append({"主机IP": row_data[0],  "系统名称": row_data[1],  "系统类型": row_data[2],  "主机分组": row_data[3],  "纳管情况": row_data[4],  "纳管时间": row_data[5],  })# 输出列表
#print(data)# 使用 pandas 将列表转换成 DataFrame
df = pd.DataFrame(data, columns=['主机IP', '系统名称', '系统类型', '主机分组', '纳管情况', '纳管时间'])
# 使用 to_excel 函数将 DataFrame 保存为 excel 文件
df.to_excel("data.xlsx")

五、测试效果

写好的代码,以后随时需要导出数据,执行下py脚本即可,大工告成~

输出的表格效果如下,对比网页展示的内容,完全get:

六、应对反爬几点建议

在写爬虫时,经常会被目标网址禁止爬取内容,那么在写爬虫防止被封有以下几点建议:

1、伪装请求报头

例如伪装成浏览器访问

2、减轻访问频率,速度

例如控制访问频率,加入time.sleep参数

3、使用代理IP

例如加入proxy代理地址,掩藏真实访问地址

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

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

相关文章

R.swift SwiftGen 资源使用指南

R.swift 和 SwiftGen 资源转换使用指南 R.swift (原始代码会打包到项目?) Pod platform :ios, 12.0 target LBtest do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!pod R.swift # pod SwiftGen, ~&g…

(二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真

一、创建工作空间 mkdir catkin_ws cd catkin_ws mkdir src cd src 二、下载wpr_simulation源码 git clone https://github.com/6-robot/wpr_simulation.git 三、编译 ~/catkin_make 目录下catkin_makesource devel/setup.bash 四、运行 roslaunch wpr_simulation wpb_s…

java小项目:简单的收入明细记事本,超级简单(不涉及数据库,通过字符串来记录)

一、效果 二、代码 2.1 Acount类 package com.demo1;public class Acount {public static void main(String[] args) {String details "收支\t账户金额\t收支金额\t说 明\n"; //通过字符串来记录收入明细int balance 10000;boolean loopFlag true;//控制循…

2023.1.19 关于 Redis 事务详解

目录 Redis 事务对比 MySQL 事务 MySQL 事务 Redis 事务 Redis 事务原子性解释 Redis 事务详解 执行流程 典型使用场景 Redis 事务命令 WATCH 的使用 WATCH 实现原理 总结 阅读下文之前建议点击下方链接了解 MySQL 事务详解 MySQL 事务详解 Redis 事务对比 MySQL 事…

[陇剑杯 2021]jwt

[陇剑杯 2021]jwt 题目做法及思路解析(个人分享) 问一:昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答: 该网站使用了______认证方式。(如有字母请全部使用小写&#xff09…

C++ 设计模式之备忘录模式

【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 -- 什么是备忘录模式 (第17种模式) 备忘录模式(Meme…

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API,所以需要包含头文件…

UI组件在线预览,程序员直呼“不要太方便~”

一、介绍 以往大家如果想查看组件的使用效果,需要打开DevEco Studio构建工程。现在为了便于大家高效开发,文档上线了JS UI组件在线预览功能,无需本地构建工程,在线即可修改组件样式等参数、一键预览编译效果。程序员直呼&#xff…

可视化k8s页面(Kubepi)

Kubepi是一个简单高效的k8s集群图形化管理工具,方便日常管理K8S集群,高效快速的查询日志定位问题的工具 随便在哪个节点部署,我这里在主节点部署 docker pull kubeoperator/kubepi-server docker run --privileged -itd --restartunless-st…

RabbitMQ-生产者可靠性

一、生产者重连 1、概念 由于网络波动导致客户端无法连接上MQ,这是可以开启MQ的失败后重连机制。 注意: 是连接失败的重试,而不是消息发送失败后的重试。 2、开启配置 spring:rabbitmq:template:retry:enabled: true # 是否启用重试机制ma…

【RabbitMQ】RabbitMQ安装与使用详解以及Spring集成

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《RabbitMQ实战》。🎯🎯 &am…

java实现红黑树

红黑树 红黑树是一种自平衡二叉查找树,其中每个节点都有一个颜色属性,颜色为红色或黑色。它的特性保证了树在插入和删除操作后仍然保持大致的平衡,使得查找操作能够在对数时间内完成。以下是红黑树的一些基本性质: 每个节点是红…

面试题16.15.珠玑妙算

前言 这两天突然发现力扣上还是有我能写出来的题的,虽说都是简单级别的(以及一道中等的题),但是能写出来力扣真的太开心了,(大佬把我这段话当个玩笑就行了),于是乎,我觉…

C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识

上一篇: C#,入门教程(20)——列表(List)的基础知识https://blog.csdn.net/beijinghorn/article/details/124094382 编写软件(大软件称为系统)与盖大楼一个道理。 假设咱们现在需要盖一座名为“天梯大厦”的…

kubernetes工作负载-DamonSet

一、DemonSet的介绍 1、什么是DemonSet DaemonSet 控制器是用来保证在所有节点上运行一个 Pod 的副本当有节点加入集群时, 也会为他们新增一个 Pod。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 简而言之…

进入docker容器,vi: command not found

问题描述: 进入docker容器,查看文件执行vim 命令,报错 vim: command not found。搜索解决方案,说执行一下 apt-get install vim命令,然后又报错 Unable to locate package vim。 解决: 1.执行 npt-get up…

YOLOv3:算法与论文详细解读

【yolov1:背景介绍与算法精讲】 【yolo9000:Better, Faster, Stronger的目标检测网络】 目录 一、YOLOv3概述二、创新与改进三、改进细节3.1 多尺度特征3.2 不同尺度先验框3.3 完整的网络结构3.3 Darknet-53主干网络3.4 残差网络3.4.1 恒等映射3.4.2 网络…

git提交代码到远端仓库的方法详解

一、何为git git就是版本控制器,就比如说你新建了一个git文件夹,里面用于存放你的C语言实习报告,现在要用git对该文件夹进行接管。当你修改了你的C语言实习报告点击保存之后,就用git的相关命令,提交给git,让…

go语言(十)---- 面向对象封装

面向对象的封装 package mainimport "fmt"type Hero struct {Name stringAd intLevel int }func (this Hero) Show(){fmt.Println("Name ", this.Name)fmt.Println("Ad ", this.Ad)fmt.Println("Level ", this.Level)}func (thi…

priority_queue的使用与模拟实现(容器适配器+stack与queue的模拟实现源码)

priority_queue的使用与模拟实现 引言(容器适配器)priority_queue的介绍与使用priority_queue介绍接口使用默认成员函数 size与emptytoppush与pop priority_queue的模拟实现构造函数size与emptytoppush与pop向上调整建堆与向下调整建堆向上调整建堆向下调…