博客主页:小馒头学python
本文专栏: Python爬虫五十个小案例
专栏简介:分享五十个Python爬虫小案例
前言
在这个博客中,我们将详细讲解如何通过 Python 编写一个爬虫来从斗鱼平台抓取美女主播的图片。随着爬虫技术的普及,抓取互联网上的公开数据变得越来越容易,而斗鱼作为一个主流的直播平台,提供了丰富的直播内容和主播的相关信息。在这里,我们通过实例来展示如何抓取斗鱼页面上的图片,并将其保存到本地。
项目准备
安装必要的库
在开始编写爬虫之前,我们需要安装一些常用的 Python 库。通过以下命令来安装所需库:
import gevent
import json
import logging
from urllib import request
from gevent import monkey
rquests:用于发送 HTTP 请求,获取网页内容。
beautifulsoup4:用于解析 HTML 页面,提取其中的图片信息。
os:用于操作文件系统,创建文件夹和保存图片。
设置开发环境
你可以选择使用本地的 Python 环境,也可以使用虚拟环境来管理依赖。推荐使用虚拟环境以避免与其他项目的依赖冲突:
python -m venv douyin_env
source douyin_env/bin/activate # 在 macOS/Linux 上
douyin_env\Scripts\activate # 在 Windows 上
爬虫原理介绍
网络爬虫概述
网络爬虫是通过模拟浏览器行为,从互联网中自动下载网页内容的程序。它能够高效地抓取网站上的数据,通常用于数据挖掘、信息收集等用途。
HTTP 请求与响应
网络爬虫与服务器的交互是通过 HTTP 协议完成的。通过发送 HTTP 请求,我们获取到服务器返回的 HTML 页面内容。在爬取斗鱼页面时,我们使用 requests 库来发起 HTTP 请求。
HTML 解析
HTML(超文本标记语言)是网页内容的基础格式。我们通过解析 HTML 文档,提取需要的信息。通常使用 BeautifulSoup 库来解析 HTML,并从中提取图片链接、文本等数据。
编写爬虫
获取网页内容
首先,我们需要获取斗鱼页面的 HTML 内容。在这个示例中,我们爬取一个美女主播的列表页面。我们将发送 GET 请求并获取返回的网页内容。
解析网页获取图片链接
获取到 HTML 内容后,我们需要使用 BeautifulSoup 对其进行解析,找出其中的图片标签 并提取其 src 属性,即图片的 URL。
下载并保存图片
通过提取到的图片链接,我们使用 requests.get() 获取图片的二进制数据,并将其保存到本地文件夹。
代码实现
下面是案例的示例
请求网页并设置日志
HEADER = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
}
# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
monkey.patch_all()
}
# 获取网页内容
def get_page_content(url):
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
else:
print(f"Failed to retrieve page: {url}")
return None
解析 HTML 并提取图片 URL
def fetch_image_urls():
try:
req = request.Request("https://www.douyu.com/gapi/rknc/directory/yzRec/1", headers=HEADER)
json_obj = json.loads(request.urlopen(req).read().decode("utf-8"))
return [src["rs16"] for src in json_obj["data"]["rl"]]
except Exception as e:
logging.error(f"获取图片URL失败:{e}")
return []
下载图片并保存
def download(img_src):
try:
img_src = img_src.replace("/dy1", "")
file_name = img_src.split("/")[-1]
response = request.urlopen(request.Request(img_src, headers=HEADER))
with open(ROOT + file_name, "wb") as f:
f.write(response.read())
logging.info(f"{file_name} 下载完成!")
except Exception as e:
logging.error(f"下载 {img_src} 失败:{e}")
主函数
if __name__ == '__main__':
image_urls = fetch_image_urls()
if not image_urls:
logging.error("没有获取到图片URL,程序将退出。")
else:
tasks = [gevent.spawn(download, src) for src in image_urls]
gevent.joinall(tasks)
完整源码
import gevent
import json
import logging
from urllib import request
from gevent import monkey
# 配置参数
ROOT = "./douyu_images/"
HEADER = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
}
# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
monkey.patch_all()
def download(img_src):
try:
img_src = img_src.replace("/dy1", "")
file_name = img_src.split("/")[-1]
response = request.urlopen(request.Request(img_src, headers=HEADER))
with open(ROOT + file_name, "wb") as f:
f.write(response.read())
logging.info(f"{file_name} 下载完成!")
except Exception as e:
logging.error(f"下载 {img_src} 失败:{e}")
def fetch_image_urls():
try:
req = request.Request("https://www.douyu.com/gapi/rknc/directory/yzRec/1", headers=HEADER)
json_obj = json.loads(request.urlopen(req).read().decode("utf-8"))
return [src["rs16"] for src in json_obj["data"]["rl"]]
except Exception as e:
logging.error(f"获取图片URL失败:{e}")
return []
if __name__ == '__main__':
image_urls = fetch_image_urls()
if not image_urls:
logging.error("没有获取到图片URL,程序将退出。")
else:
tasks = [gevent.spawn(download, src) for src in image_urls]
gevent.joinall(tasks)
进阶功能
-
多线程优化爬虫速度
通过 Python 的 concurrent.futures 库,可以让图片下载并行化,从而提高爬取速度。多线程方式可以显著提升下载效率,尤其是当需要下载大量图片时。 -
防止重复下载
可以根据图片的 URL 或使用哈希值来判断图片是否已经下载过,从而避免重复下载。 -
处理反爬机制
如果斗鱼使用了反爬措施(如验证码、IP 限制等),可以考虑使用代理 IP、设置请求头、延时访问等手段来模拟正常用户行为,避免被封禁。
总结与展望
本文详细介绍了如何编写一个简单的 Python 爬虫,从斗鱼平台抓取美女主播的图片。爬虫的实现过程包括获取网页内容、解析网页、提取图片 URL 和下载图片。通过一些进阶功能的拓展,可以提升爬虫效率和稳定性。
爬虫技术是一个非常有趣的领域,未来我们可以继续研究如何处理更复杂的网站结构、如何使用机器学习处理图片等问题。希望这篇博客能帮助你快速掌握爬虫的基本技巧,开始自己的数据抓取之旅。
标签:src,logging,某斗,img,Python,颜值,爬虫,import,图片 From: https://blog.csdn.net/null18/article/details/144311976