Python中如何使用PhantomJS进行动态网页爬虫?

刚接触动态爬虫,还没搞明白怎么玩,目前想爬网站把爬到的数据都能保存为像抓包那样的格式,有什么好的方式么,希望大牛们多多指教

希望爬取到的 get post 等请求都像下面这样的格式:

GET / HTTP/1.1 Host: www.weibo.com Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Upgrade-Insecure-Requests: 1 Cookie: test User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8 Accept-Language: zh-cn Accept-Encoding: gzip, deflate Connection: keep-alive


Python中如何使用PhantomJS进行动态网页爬虫?

1 回复

用PhantomJS做动态网页爬取,现在更推荐用Selenium配合无头浏览器。PhantomJS已经停止维护了,不过思路是相通的。

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')
options.add_argument('--disable-gpu')

driver = webdriver.Chrome(options=options)

try:
    # 访问目标网页
    driver.get('https://example.com')
    
    # 等待特定元素加载(关键!)
    wait = WebDriverWait(driver, 10)
    element = wait.until(
        EC.presence_of_element_located((By.CLASS_NAME, "target-class"))
    )
    
    # 获取动态加载的内容
    dynamic_content = driver.find_element(By.CLASS_NAME, "target-class").text
    
    # 如果需要执行JS
    result = driver.execute_script("return document.title;")
    
    print(f"获取到的内容: {dynamic_content}")
    
finally:
    driver.quit()

核心要点:

  1. 等待机制:用WebDriverWait等元素加载完再操作,比time.sleep()靠谱
  2. 无头模式--headless参数让浏览器在后台运行
  3. 元素定位:用ID、CLASS、XPATH等定位动态内容
  4. JS执行execute_script()能直接跑JavaScript代码

如果页面有复杂交互(点击、滚动),就在定位元素后加上.click()或执行滚动JS。

建议直接用Selenium+Chrome/Firefox的无头模式。

回到顶部