在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!
今日推荐:数据库数据同步到缓存方法
文章链接:https://cloud.tencent.com/developer/article/2474762
通过这篇文章,你将能够深入了解并介绍了数据库,数据库是数据的持久化存储核心,负责数据的持久保存与管理。然而,数据库的读写操作相对较慢,尤其是在高并发场景下,频繁的数据库访问可能导致系统性能瓶颈。缓存则是位于数据库与应用程序之间的高速数据存储层,能够显著提升数据的读取速度,减少数据库的负载压力。为了充分发挥缓存的优势,确保缓存数据与数据库数据的一致性成为了关键任务,即需要高效地将数据库数据同步到缓存中。
在这个博客中,我们将详细讲解如何通过 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 请求,我们获取到服务器返回的 HTML 页面内容。在爬取斗鱼页面时,我们使用 requests 库来发起 HTTP 请求。
HTML(超文本标记语言)是网页内容的基础格式。我们通过解析 HTML 文档,提取需要的信息。通常使用 BeautifulSoup 库来解析 HTML,并从中提取图片链接、文本等数据。
首先,我们需要获取斗鱼页面的 HTML 内容。在这个示例中,我们爬取一个美女主播的列表页面。我们将发送 GET 请求并获取返回的网页内容。
获取到 HTML 内容后,我们需要使用 BeautifulSoup 对其进行解析,找出其中的图片标签 <img> 并提取其 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 爬虫,从斗鱼平台抓取美女主播的图片。爬虫的实现过程包括获取网页内容、解析网页、提取图片 URL 和下载图片。通过一些进阶功能的拓展,可以提升爬虫效率和稳定性。
爬虫技术是一个非常有趣的领域,未来我们可以继续研究如何处理更复杂的网站结构、如何使用机器学习处理图片等问题。希望这篇博客能帮助你快速掌握爬虫的基本技巧,开始自己的数据抓取之旅。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。