爬虫基本原理介绍、实现及问题解决、爬虫实战、爬取经典moba游戏英雄列表

本文主要是介绍爬虫基本原理介绍、实现及问题解决、爬虫实战、爬取经典moba游戏英雄列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

文章目录

  • 爬虫基本原理介绍、实现及问题解决、爬虫实战、爬取经典moba游戏英雄列表
    • 基本原理
    • 实现方法
    • 问题解决
    • Python爬虫简单实现
    • 数据清洗
      • 安装BeautifulSoup
      • 解析文档
      • 提取数据
      • 数据清洗
      • 存储数据
    • 爬取经典moba游戏英雄列表
      • 完整代码
      • 运行代码:
      • 运行结果
    • 🎉 往期精彩回顾

爬虫基本原理介绍、实现及问题解决、爬虫实战、爬取经典moba游戏英雄列表

爬虫(Web Crawler)是一种自动化的网络机器人,其基本功能是从互联网上抓取信息。爬虫的工作原理、实现方法以及可能遇到的问题及其解决方案如下:

基本原理

  1. 请求(Request):爬虫向目标网站发送HTTP请求,获取网页内容。
  2. 响应(Response):服务器处理请求后,返回网页的HTML、JSON或其他格式的响应数据。
  3. 解析(Parsing):爬虫解析响应内容,提取有用信息或链接。
  4. 存储(Storage):将提取的数据存储到数据库或文件中。
  5. 遍历(Traversal):根据解析出的链接,递归或迭代地发起新的请求,继续抓取其他网页。

实现方法

  1. 选择合适的工具:Python是实现爬虫的流行语言,常用的库有Requests、BeautifulSoup、lxml和Scrapy。
  2. 编写爬虫代码
    • 使用requests库发起请求获取网页内容。
    • 使用BeautifulSouplxml解析HTML,提取数据。
    • 使用正则表达式或XPath选择器定位所需信息。
    • 遍历页面中的链接,构建待抓取的URL队列。
  3. 遵守robots.txt协议:robots.txt文件定义了搜索引擎爬虫可以抓取的网站范围,合法的爬虫应遵守该协议。
  4. 设置User-Agent:模拟浏览器的User-Agent,避免被识别为爬虫而被封禁。
  5. 异常处理:编写代码处理可能出现的异常,如网络请求失败、解析错误等。

问题解决

  1. 反爬虫机制
    • IP封禁:使用代理服务器池,轮换IP地址。
    • 请求频率限制:设置合理的请求间隔,避免过快请求。
    • 验证码:使用OCR技术或第三方服务识别验证码。
    • 动态内容:分析Ajax请求,模拟浏览器行为或使用Selenium获取动态加载的数据。
  2. 数据清洗:对抓取的数据进行清洗和格式化,以便后续处理和分析。
  3. 性能优化
    • 使用多线程或异步IO提高爬取效率。
    • 合理设计数据存储结构,提高读写效率。
  4. 法律风险:尊重版权和隐私,遵守相关法律法规,避免侵权行为。

爬虫的开发和使用需要遵循法律法规和道德标准,不得侵犯他人权益。在实际应用中,应尽量减少对目标网站的影响,合理合法地使用爬虫技术。

Python爬虫简单实现

以下是一个简单的Python爬虫脚本,它使用requests库从百度网站获取HTML内容,并将其保存到本地文件中。我已经为代码添加了注释,以便更好地理解每一步的过程。

import requestsresponse = requests.get('https://www.baidu.com')
html = response.content.decode()
print(html)with open('data/json/baidu.html', 'w') as fp:fp.write(html)
print('保存完毕!')

在运行上述脚本时,需要注意以下几点:

  1. 确保requests库已经安装在你的Python环境中。如果没有安装,可以通过运行pip install requests来安装。
  2. 脚本中的data/json/baidu.html是保存文件的路径和文件名,你需要根据你的文件系统结构来修改这个路径,确保程序有权限写入到该路径。
  3. 如果你运行脚本时遇到网络问题,如无法访问百度网站,可能需要检查你的网络连接,或者检查是否有代理、VPN等网络设置影响了请求。
  4. 由于网络请求可能受到目标网站的反爬虫策略影响,建议在实际使用中添加适当的请求头、User-Agent等信息,并遵守目标网站的robots.txt文件规定。

数据清洗

BeautifulSoup 是一个用于解析HTML和XML文档的Python库,它创建了一个解析树,使得我们可以方便地提取和操作页面数据。在数据清洗过程中,BeautifulSoup 可以帮助我们从网页中提取有用的信息,并将其转换为统一的格式。以下是使用 BeautifulSoup 进行数据清洗的基本步骤:

安装BeautifulSoup

如果你还没有安装 BeautifulSoup,可以通过以下命令进行安装:

pip install beautifulsoup4

解析文档

首先,你需要一个HTML或XML文档作为输入。这可以是通过HTTP请求获取的网页内容,也可以是本地文件。

from bs4 import BeautifulSoup# 假设我们已经有了HTML内容,可以直接解析
html_content = """
<html>
<head><title>页面标题</title></head>
<body>
<div class="content"><p class="date">2023-03-17</p><ul id="list"><li class="item">第一项</li><li class="item">第二项</li></ul>
</div>
</body>
</html>
"""# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'html.parser')  # 'html.parser'是解析器,也可以使用'lxml'等

提取数据

使用 BeautifulSoup 提供的方法,如 find(), find_all(), select() 等,来定位和提取所需的元素。

# 提取单个元素
date_tag = soup.find('p', class_='date')
date = date_tag.text.strip()  # 去除空白字符# 提取多个元素
items = soup.find_all('li', class_='item')
item_texts = [item.text.strip() for item in items]  # 列表推导式提取所有文本内容

数据清洗

对提取出的数据进行清洗,包括去除空白字符、标准化格式、转换数据类型等。

# 去除空白字符
cleaned_date = date.replace('\n', '').replace(' ', '')# 标准化格式,例如日期格式
standard_date = cleaned_date.replace('-', '')# 转换数据类型,例如将字符串转换为整数或浮点数
# 假设我们有一个价格字符串
price_str = '¥29.99'
price = float(price_str.replace('¥', ''))  # 去除货币符号并转换为浮点数

存储数据

将清洗后的数据存储到适当的数据结构中,如列表、字典、数据帧等。

# 将清洗后的数据存储到字典中
data = {'date': standard_date,'items': item_texts
}# 或者存储到列表中
data_list = [{'date': standard_date, 'items': item_texts}
]# 如果需要,可以将数据保存到文件或数据库中
import json
with open('data.json', 'w', encoding='utf-8') as f:json.dump(data_list, f, ensure_ascii=False, indent=4)

以上步骤展示了如何使用 BeautifulSoup 进行基本的数据清洗。在实际应用中,你可能需要根据具体的网页结构和数据需求,编写更复杂的解析和清洗逻辑。此外,BeautifulSoup 也提供了许多其他功能,如处理编码问题、解析嵌套标签等,可以根据需要进行学习和使用。

爬取经典moba游戏英雄列表

完整代码

import requests
from pyquery import PyQueryurl = 'https://pvp.qq.com/web201605/herolist.shtml'
html = requests.get(url).content
# print(html)doc = PyQuery(html)items = doc('.herolist > li').items()
# print(items)
# 生成迭代对象# 循环遍历
for item in items:# print(item)url = item.find('img').attr('src')# print(url)urls = 'http:' + urlname = item.find('a').text()# print(name)url_content = requests.get(urls).content# 下载 w write b bytes 二进制写入with open('data/herolist/' + name + '.jpg', 'wb') as file:# 保存file.write(url_content)print('正在下载:%s---------%s' % (name, urls))print('下载完毕')

运行代码:

在这里插入图片描述

运行结果

在这里插入图片描述

如果对你有帮助,点赞、收藏、关注是我更新的动力!👋🌟🚀

🎉 往期精彩回顾

  1. 前端开发的发展史:框架与技术栈的演变
  • 706阅读 · 11点赞 · 8收藏
  1. 打字通小游戏制作教程:用HTML5和JavaScript提升打字速度
  • 588阅读 · 24点赞 · 18收藏
  1. 扫雷小游戏制作教程:用HTML5和JavaScript打造经典游戏
  • 776阅读 · 15点赞 · 20收藏
  1. 拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏
  • 487阅读 · 9点赞 · 12收藏
  1. Mock.js 基本语法与应用笔记
  • 280阅读 · 5点赞 · 9收藏
  1. 排序算法全景:从基础到高级的Java实现
  • 679阅读 · 25点赞 · 9收藏
  1. CentOS系统上安装Redis操作教程
  • 410阅读 · 4点赞 · 4收藏
  1. 打造你的HTML5打地鼠游戏:零基础入门教程
  • 1131阅读 · 28点赞 · 30收藏
  1. 打造你的贪吃蛇游戏:HTML、CSS与JavaScript的完美结合
  • 1078阅读 · 26点赞 · 12收藏
  1. 快速上手:使用Hexo搭建并自定义个人博客
  • 669阅读 · 19点赞 · 20收藏
  1. 在Vue中处理接口返回的二进制图片数据
  • 704阅读 · 21点赞 · 18收藏
  1. 打造经典游戏:HTML5与CSS3实现俄罗斯方块
  • 1117阅读 · 31点赞 · 23收藏
  1. Spring Boot中Excel数据导入导出的高效实现
  • 1066阅读 · 23点赞 · 22收藏
  1. Spring Boot中实现图片上传功能的两种策略
  • 1297阅读 · 24点赞 · 13收藏
  1. CentOS上安装MySQL 5.7和MySQL 8.0教程
  • 837阅读 · 21点赞 · 13收藏
  1. Spring Boot工程集成验证码生成与验证功能教程
  • 1417阅读 · 39点赞 · 17收藏
  1. Spring Boot 3项目集成Swagger3教程
  • 809阅读 · 15点赞 · 8收藏
  1. CentOS上安装JDK的详细教程
  • 739阅读 · 12点赞 · 13收藏
  1. 解决前端项目中Node.js版本不一致导致的依赖安装错误
  • 876阅读 · 17点赞 · 16收藏
  1. 入门指南:使用uni-app构建跨平台应用
  • 1315阅读 · 29点赞 · 9收藏
  1. Vue项目中使用Mock.js进行API模拟
  • 655阅读 · 17点赞 · 7收藏
  1. Vue组件间通信实践
  • 866阅读 · 24点赞 · 18收藏
  1. CentOS上安装与配置Nginx
  • 683阅读 · 9点赞 · 6收藏
  1. Vue跳转页面传递参数
  • 268阅读 · 5点赞 · 4收藏
  1. vue项目如何下载使用gsap动画库
  • 551阅读 · 1点赞 · 0收藏
  1. VS Code上搭建React开发环境
  • 2286阅读 · 2点赞 · 10收藏
  1. vue命令式组件封装以及使用
  • 819阅读 · 2点赞 · 3收藏
  1. springboot项目常用配置
  • 379阅读 · 1点赞 · 0收藏
  1. 如何在Vue中使用百度地图API来创建地图应用程序。
  • 345阅读 · 3点赞 · 1收藏
  1. 手把手教你CentOS下载Nginx配置使用
  • 464阅读 · 2点赞 · 3收藏
  1. vue3 setup语法糖的三种书写方法
  • 2824阅读 · 5点赞 · 14收藏
  1. vue3中vuex 的使用基本使用和二次封装
  • 447阅读 · 3点赞 · 1收藏
  1. MySQL基础全套全网最详细讲解
  • 770阅读 · 3点赞 · 6收藏
  1. 前端开发之响应式布局,响应式 HTML, CSS and JavaScript 框架介绍;
  • 703阅读 · 3点赞 · 2收藏
  1. VS code搭建C/C++运行环境简单易上手
  • 2786阅读 · 5点赞 · 8收藏
  1. Vue.2&Vue.3项目引入Element-UI教程&踩坑
  • 9268阅读 · 22点赞 · 82收藏
  1. Vue项目引入Echarts可视化图表库教程&踩坑
  • 2203阅读 · 3点赞 · 5收藏
  1. VirtualBox虚拟机搭建CentOS系统教程
  • 4493阅读 · 4点赞 · 32收藏
  1. VS Code上搭建Vue开发环境
  • 10662阅读 · 13点赞 · 64收藏
  1. Color-UI 简介及使用教程
  • 5921阅读 · 2点赞 · 13收藏

这篇关于爬虫基本原理介绍、实现及问题解决、爬虫实战、爬取经典moba游戏英雄列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800929

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3