如何用Python爬取数据源URL动态变化的网址?

无意间发现一个网站 七麦数据
咦~这数据好像还蛮有意思的,尝试爬取一波。 这也太简单了吧,不就是 XHR 加载的嘛,数据都给我装好了 https://api.qimai.cn/rank/indexPlus/brand_id/2?analysis=dDB4Fi8wUEF1J2VAfndkQy8II0YHIn8WUT1xCVAEVlp5Rx4TAwpcGlENVFFLY11MEkoHRwQLVTxZARxUchVSBgpdBlFUUQEMDiMTBQ%3D%3D&brand=all&country=cn&device=iphone&genre=36&date=2018-05-05&page=1
有个参数 analysis,这么大一串,怕是有问题,多请求几次,,果然,这个参数在变化,而且前面的链接也失效了 Q_Q..
好吧,定位到这个文件夹 static.qimai.cn/static/js/app.5aed8c28e91d77a9f578.js ,,无奈 js 是个渣渣。。
想问下这种网页的话,除了 selenium 和分析 js,还有没有什么方法?分析 js 的话,有没有什么小技巧?
跪等大神分享


如何用Python爬取数据源URL动态变化的网址?

17 回复

还是上 selenium 吧


这种情况得用Selenium或者Playwright这种能执行JavaScript的库。很多网站的数据是通过JS动态加载的,URL会变,直接用requests拿不到完整数据。

给你个Selenium的例子:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 设置Chrome选项
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 无头模式,不显示浏览器窗口

# 初始化驱动
driver = webdriver.Chrome(options=options)

try:
    # 访问目标网页
    driver.get('https://example.com/dynamic-page')
    
    # 等待动态内容加载(这里等某个特定元素出现)
    wait = WebDriverWait(driver, 10)
    target_element = wait.until(
        EC.presence_of_element_located((By.CLASS_NAME, 'data-container'))
    )
    
    # 获取动态加载后的页面源码
    page_source = driver.page_source
    
    # 这里可以用BeautifulSoup解析page_source
    # soup = BeautifulSoup(page_source, 'html.parser')
    
    # 或者直接通过Selenium定位元素提取数据
    data_elements = driver.find_elements(By.CLASS_NAME, 'data-item')
    for element in data_elements:
        print(element.text)
        
    # 如果需要点击按钮加载更多数据
    load_more_button = driver.find_element(By.ID, 'load-more')
    load_more_button.click()
    time.sleep(2)  # 等待新数据加载
    
finally:
    driver.quit()

关键点:

  1. WebDriverWait配合expected_conditions等动态内容加载完成
  2. 通过page_source获取完整的渲染后HTML
  3. 可以直接用Selenium的方法定位元素,或者用BeautifulSoup解析源码

如果网站反爬厉害,可能需要加user-agent、处理cookie,或者用undetected-chromedriver

用Playwright也行,API更现代,支持异步。看具体需求选工具。

总结:用Selenium或Playwright处理JS动态加载。

之前做煎蛋的反加密,是把 js 下载下来,然后调用关键解密函数,手工分析加密太麻烦,而且指不定什么时候又改了

分析不了就 selenium 之类的吧

好吧,tks

可以请教一下你的前端同事,这种分析对他们来说应该不难

你还别说 这网页挺复杂的 有时间分析下

无非是 js 中有个函数生成了一个加了时间戳的密钥,然后过几分钟失效,把 js 格式化一下找找,应该不难定位函数。

问一下 我连 analysis 参数都搜不到了,请问下怎么搜到这个参数名呢

全局搜索,ctrl+shift+f

好久没碰了,不知道页面改版没,,感兴趣你可以试下

全局搜不到, 是不是采用什么编码方式加密了, 望指点, 试了 16 位编码 ,没找到

已经搞定

好像页面改版了,应该是换关键字了,,,

怎么弄的?

你好,请问解决了吗,能否指点一下

回到顶部