Python爬取动态加载的网站图片

本文介绍了如何使用Python爬取动态加载的网站,以堆糖网为例,讲解了分析动态网站的方法,通过检查网络请求找到JSON数据源,并利用JSON解析工具获取图片URL,最终实现图片的下载。核心在于理解动态加载原理和正确解析JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一篇爬取的是静态网页,静态图片的网站,说实话,是最简单的,今天咱们就爬取一下动态的网站。
话不多说,目标网址:堆糖网
https://www.duitang.com/search/?kw=%E6%A0%A1%E8%8A%B1&type=feed

我们先分析一下网站,发现这个网站的网址没有翻页的,每当鼠标往下滑的时候,每滑到一定数量的图片的时候会再次加载新的图片,这是怎么回事呢? 其实这个就叫动态网站,动态网站最重要的不是写代码,而是分析网站,找到数据存放的真正位置。

既然知道这个是动态网站,咱们就要用到检查(F12)了,右键-检查,或者直接按F12,点击netwrok,然后再点击XHR

在这里插入图片描述
你会发现里面是空白的,怎么搞? 很简单,刷新或者按F5就可以了。
但是刷新后还是没有?怎么办?呵呵,你把网页往下拉,就出来了
在这里插入图片描述

这个就是我们需要爬取的真正网址,如果你继续往下拉,会发现有很多类似的这种网址,你可以尝试找找这些网址的不同之处

现在我们开始分析这个网站,直接看图(打字好累…)
在这里插入图片描述
按照上面的步骤就能看到图片真正存放的地方,发现这是json格式的,我们要怎么解析呢?这里给你们介绍个免费的json解析网站:https://www.json.cn/

首先把这个网址复制、然后打开一个新的窗口,粘贴,再把里面的内容复制,然后在粘贴进上面那个网站即可,emmmmm… 简单点就是复制、粘贴,不出意外你就能看到图片的地址啦

解析完毕,开始咱们的代码:

import requests

url = "https://www.duitang.com/napi/blog/list/by_search/?kw=校花&type=feed&start=0" 

headers = {
   
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3760.400 QQBrowser/10.5.4083.400'
}

res = requests.get(url,headers=headers).json(
Python中,爬取动态网站上的图片通常需要结合使用诸如Selenium、Requests-HTML库以及BeautifulSoup等工具。这是因为动态内容往往由JavaScript生成,直接的HTTP请求可能无法获取到最新的数据。 以下是基本步骤: 1. 安装必要的库: - `selenium`:用于控制浏览器执行JavaScript - `webdriver_manager`:帮助管理Selenium的WebDriver(比如ChromeDriver) - `requests_html` 或 `lxml`:处理静态HTML ```bash pip install selenium webdriver_manager requests_html ``` 2. 使用Selenium启动浏览器并加载网页: ```python from selenium import webdriver driver = webdriver.Chrome(executable_path=webdriver_manager.chromedriver_path()) driver.get('http://dynamic_website.com') ``` 3. 等待页面加载完成,有时需要暂停一段时间让JavaScript渲染: ```python time.sleep(5) # 需要根据实际情况调整时间 ``` 4. 查找并保存图片元素: 使用如`requests_html`这样的库解析页面,找到img标签的src属性,然后下载图片: ```python from requests_html import HTMLSession session = HTMLSession() response = session.get(driver.current_url) img_links = response.html.find('img', first=True)['src'] # 获取第一个图片链接 download_image(img_links, 'image.jpg') # 自定义函数下载图片 ``` 5. 下载图片: ```python def download_image(url, filename): with open(filename, 'wb') as f: response = requests.get(url, stream=True) for chunk in response.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) ``` 6. 关闭浏览器: ```python driver.quit() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值