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

本文介绍了爬虫的基本原理,包括请求、响应、解析和存储,重点讲解了Python爬虫的实现,使用BeautifulSoup解析HTML并演示了抓取经典Moba游戏英雄列表的完整过程,包括数据清洗和问题解决策略。
摘要由CSDN通过智能技术生成

🌟 前言

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

在这里插入图片描述

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

response = 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 PyQuery

url = '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:' + url
    name = 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收藏
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛可可白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值