爬虫基本原理介绍、实现及问题解决、爬虫实战、爬取经典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

相关文章

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,