You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium爬取Facebook封面图时,如何避免获取模糊图片URL?

问题:爬取Facebook活动封面图获取到模糊缩略图而非原图

使用Python Selenium爬取Facebook活动页面的封面图片时,代码能返回图片URL,但得到的是带模糊参数的缩略图,而非清晰的原图。以下是相关代码、期望的原图URL和实际获取的模糊图URL:

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests

url = 'https://www.facebook.com/events/851274783286508/?active_tab=about'
driver = webdriver.Edge()
driver.get(url)
cover_class = 'img.x1ey2m1c.x9f619.xds687c.x5yr21d.x10l6tqk.x17qophe.x13vifvy.xh8yej3'

img = driver.find_element(By.CSS_SELECTOR,cover_class)
print(img.get_attribute('src'))

requests.get(img.get_attribute('src'))

期望获取的原图URL

https://scontent.fpsd2-1.fna.fbcdn.net/v/t39.30808-6/321296208_468127735500704_5967700403570897493_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=340051&_nc_eui2=AeFSxY7I0TKJvJRIx37yNz_jvkkF4L__0_G-SQXgv__T8a3A9q5B5t3jD54iDEhyayU7Wf-86Xko3e-lkPKiOl8v&_nc_ohc=kU48KdHWOFcAX_w-iW0&_nc_ht=scontent.fpsd2-1.fna&oh=00_AfCjDp7TSLV22b8WigiDlMedF9ONKuDXmW885vje3OAlMQ&oe=64573615

实际获取的模糊缩略图URL

https://scontent.fpsd2-1.fna.fbcdn.net/v/t39.30808-6/321296208_468127735500704_5967700403570897493_n.jpg?stp=dst-jpg_fb50_s320x320&_nc_cat=106&ccb=1-7&_nc_sid=340051&_nc_ohc=kU48KdHWOFcAX_w-iW0&_nc_ht=scontent.fpsd2-1.fna&oh=00_AfDSvqeVreyDGTVq4If0dBtyBA6H1PA0YV9CVaY3DLnupg&oe=64573615


解决方案

1. 分析URL差异

实际返回的URL比原图URL多了stp=dst-jpg_fb50_s320x320参数,这是Facebook用于指定图片压缩格式、尺寸的参数,移除该参数即可获取原图。

2. 两种处理方式

方式一:直接修改URL移除模糊参数

通过解析URL并删除stp参数,重构出原图URL:

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
from urllib.parse import urlparse, parse_qs, urlencode

url = 'https://www.facebook.com/events/851274783286508/?active_tab=about'
driver = webdriver.Edge()
driver.get(url)
cover_class = 'img.x1ey2m1c.x9f619.xds687c.x5yr21d.x10l6tqk.x17qophe.x13vifvy.xh8yej3'

img = driver.find_element(By.CSS_SELECTOR, cover_class)
src_url = img.get_attribute('src')

# 解析URL,移除stp参数
parsed = urlparse(src_url)
query_params = parse_qs(parsed.query)
query_params.pop('stp', None)
# 重新生成URL
original_url = parsed._replace(query=urlencode(query_params, doseq=True)).geturl()

print("原图URL:", original_url)
# 下载原图
with open('event_cover.jpg', 'wb') as f:
    f.write(requests.get(original_url).content)

driver.quit()

方式二:获取图片的原始属性

Facebook通常会将原图URL存储在data-src或data-original这类自定义属性中,优先尝试获取这些属性:

from selenium import webdriver
from selenium.webdriver.common.by import By
import requests

url = 'https://www.facebook.com/events/851274783286508/?active_tab=about'
driver = webdriver.Edge()
driver.get(url)
cover_class = 'img.x1ey2m1c.x9f619.xds687c.x5yr21d.x10l6tqk.x17qophe.x13vifvy.xh8yej3'

img = driver.find_element(By.CSS_SELECTOR, cover_class)
# 优先取data-src,不存在则用src
original_url = img.get_attribute('data-src') or img.get_attribute('src')

print("原图URL:", original_url)
with open('event_cover.jpg', 'wb') as f:
    f.write(requests.get(original_url).content)

driver.quit()

注意事项

  • Facebook的页面结构、CSS类名和属性可能随时更新,需定期验证代码有效性;
  • 爬取Facebook内容需遵守其服务条款,避免频繁请求触发反爬机制。

内容的提问来源于stack exchange,提问作者Muhammad Yousef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:23:08