关于python 爬取 ajax页面

本文介绍如何使用Anaconda进行Python环境及包的管理。包括创建不同版本的Python环境、激活与切换环境、安装和更新软件包等操作。

Anaconda下载地址

安装只要按部就班的点next就好

环境管理

Conda的环境管理功能允许我们同时安装若干不同版本的Python,并能自由切换。对于上述安装过程,假设我们采用的是Python 2.7对应的安装包,那么Python 2.7就是默认的环境(默认名字是root,注意这个root不是超级管理员的意思)。

假设我们需要安装Python 3.4,此时,我们需要做的操作如下:

# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)
conda create --name python34 python=3.4

# 安装好后,使用activate激活某个环境
activate python34 # for Windows
source activate python34 # for Linux & Mac
# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH

# 此时,再次输入
python --version
# 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境

# 如果想返回默认的python 2.7环境,运行
deactivate python34 # for Windows
source deactivate python34 # for Linux & Mac

# 删除一个已有的环境
conda remove --name python34 --all


#查看已安装的环境,当前被激活的环境会显示有一个星号或者括号。
conda info -e
用户安装的不同python环境都会被放在目录~/anaconda/envs下

包管理

# 安装scipy
conda install scipy
# conda会从从远程搜索scipy的相关信息和依赖项目,对于python 3.4,conda会同时安装numpy和mkl(运算加速的库)

# 查看已经安装的packages
conda list
# 最新版的conda是从site-packages文件夹中搜索已经安装的包,不依赖于pip,因此可以显示出通过各种方式安装的包

conda的一些常用操作如下:

# 查看当前环境下已安装的包
conda list

# 查看某个指定环境的已安装包
conda list -n python34

# 查找package信息
conda search numpy

# 安装package
conda install -n python34 numpy
# 如果不用-n指定环境名称,则被安装在当前活跃环境
# 也可以通过-c指定通过某个channel安装

# 更新package
conda update -n python34 numpy

# 删除package
conda remove -n python34 numpy
<think>我们参考了多个关于动态网页爬取的引用资料,其中提到使用seleniumwebdriver来模拟浏览器行为是常见方法。用户需求明确:如何用Python爬取动态加载的网页数据。根据引用[1][2][3][4],动态加载的数据通常由JavaScript生成,传统静态爬取(如requests)无法获取。解决方案主要是模拟浏览器执行JS,常用工具为selenium。我们将分步骤说明:1.安装必要的库2.配置webdriver(以Chrome为例)3.使用selenium打开网页并等待动态内容加载4.提取数据注意:引用[4]提到,动态网页爬取的原理是模拟浏览器执行JS,因此我们需要等待JS执行完成后再获取页面内容。步骤详细说明:</think> ### 如何使用Python爬取动态加载的网页数据 动态加载的网页数据(如JavaScript渲染内容)需特殊处理,以下是完整解决方案: #### 核心方法:使用浏览器自动化工具 ```python from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By # 1. 配置浏览器驱动 service = Service('/path/to/chromedriver') # 需提前下载对应驱动 driver = webdriver.Chrome(service=service) # 2. 访问目标网页 driver.get("https://example.com/dynamic-page") # 3. 显式等待数据加载(关键步骤) from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "target-class")) ) # 4. 获取渲染后的页面源码 page_source = driver.page_source # 5. 数据解析(示例使用BeautifulSoup) from bs4 import BeautifulSoup soup = BeautifulSoup(page_source, 'html.parser') prices = [price.text for price in soup.select('.price-class')] # 6. 关闭浏览器 driver.quit() ``` #### 解决动态加载的关键技术 1. **显式等待机制**:通过`WebDriverWait`确保目标元素加载完成 2. **页面状态检测**:可添加滚动触发加载 ```python driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") ``` 3. **Ajax请求监控**:部分场景需分析XHR请求 ```python from selenium.webdriver.common.desired_capabilities import DesiredCapabilities caps = DesiredCapabilities.CHROME caps['goog:loggingPrefs'] = {'performance': 'ALL'} # 捕获网络请求 ``` #### 替代方案(轻量级) 对简单JS渲染可用 **requests-html**: ```python from requests_html import HTMLSession session = HTMLSession() response = session.get(url) response.html.render() # 执行JavaScript print(response.html.find('.target-element')) ``` #### 注意事项 1. 遵守`robots.txt`协议 2. 添加随机延迟避免封禁 ```python import random, time time.sleep(random.uniform(1, 3)) ``` 3. 配合`User-Agent`轮换: ```python from fake_useragent import UserAgent ua = UserAgent() options.add_argument(f'user-agent={ua.random}') ``` > 提示:对于复杂SPA应用(如React/Vue),优先采用浏览器自动化方案。具体应用可参考动态网页与JS加载数据原理[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值