Python 爬虫 处理图片懒加载

本文探讨了网页中图片懒加载的机制,图片链接通常存储在非src属性中,只在进入可视区域时替换。介绍了使用Python爬虫处理这种加载方式,提到了需要的库如lxml和beautifulsoup4,并提供了实现代码。

1、背景

在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载,该图片加载后就可以查阅到相关的伪属性,访问的时候利用伪属性去访问

2、需要的python包

pip install lxml   or pip install beautifulsoup4

3、实现代码

from lxml import html
from bs4 import BeautifulSoup
import requests
def readHtmlsoup(url):
    headers = {
        "user-agent": "Mozilla/5.0(X11; Linux x86_64) AppleWebKit/537.36(KHTML, like "
                      "Gecko) Chrome/73.0.3683.86 Safari/537.36",
        "accept": "text/html,application/xhtml+xml,application/xml;q = 0.9,image/webp,image/apng,*/*;q = 0.8",
        "accept-language": "en-US,en;q = 0.9",
        "accept-encoding": "gzip,deflate,br"
    }  # chorme
    '''
    headers={
                "user-agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0",
                "accept":"image/webp,*/*",
                "accept-language": "en-US,en;q=0.5
### 处理网页中的图片懒加载 对于处理网页上图片懒加载的情况,可以采用多种技术手段相结合的方式。当面对由 JavaScript 动态生成的页面内容时,传统的基于静态 HTML 的爬取方式无法有效工作,因为所需的 URL 或者图像资源可能仅在特定事件触发后才被加载。 #### 使用 Selenium 解决方案 Selenium 是一种强大的工具,能够模拟真实的浏览器行为,这对于应对复杂的前端交互特别有用。它允许自动化控制浏览器实例,从而执行诸如滚动、点击等动作来触发展开更多内容的行为[^2]。 ```python from selenium import webdriver import time options = webdriver.ChromeOptions() driver = webdriver.Chrome(options=options) try: driver.get('目标网址') # 执行下拉操作以加载更多的图片 last_height = driver.execute_script("return document.body.scrollHeight") while True: # 向下滑动到底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待新内容加载出来 time.sleep(2) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height finally: images = [] img_elements = driver.find_elements_by_tag_name('img') # 查找所有的<img>标签 for element in img_elements: src = element.get_attribute('src') or element.get_attribute('data-src') if src and 'http' in src: # 过滤掉相对路径或其他不符合条件的链接 images.append(src) print(images[:10]) # 输出前十个图片url作为示例 driver.quit() # 关闭浏览器窗口 ``` 这段代码展示了如何利用 `selenium` 来模拟用户向下滚动的动作,直到没有新的图片被加载为止。之后遍历所有 `<img>` 标签,并尝试从其属性中提取有效的图片 URL 地址。 #### 结合 Requests 和 BeautifulSoup 技术 如果确认了懒加载机制依赖于 AJAX 请求,则可以直接分析网络请求,找出规律性的 API 接口调用来获取数据而无需完全渲染整个页面。这通常涉及到监控 HTTP 流量,识别出发送给服务器的具体参数模式,进而构建相应的查询字符串或 JSON 负载来进行批量抓取[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值