记一次,Python爬取页面手机号码加密处理过程

本文记录了一次Python爬虫过程中遇到的页面电话号码加密问题,详细描述了解密过程,包括发现CSS字体加密、解析Base64字体信息、建立字符对应关系字典,最终成功解密出联系电话。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、爬取页面后电话号码加密了

二、检查页面元素发现也看不到,使用的是css字体加密

 

 

 三、继续查看,发现是用base64加密的字体信息

四、网上查资料先要解密字体的对应关系

#正则查找base64加密后的数据
ba64str = re.findall('charset=utf-8;base64,(.*?)"\)', text)[0]
#用base64解密
b = base64.b64decode(ba64str)
print(b)
#使用字体工具处理成字典
font = TTFont(BytesIO(b))
bestcmap = font['cmap'].getBestCmap()
print(bestcmap)

五、查找对应关系,组成正确的对应关系字典

六、网页数据找到加密后的数据,替换成16进制&#x

<think>嗯,用户问的是如何用Python爬取动态页面。首先,我得想清楚动态页面和静态页面的区别。动态页面通常是通过JavaScript在客户端加载数据的,比如用Ajax或者前端框架生成的,所以直接用requests库的话可能拿不到完整内容,因为那些数据是后来动态加载的。那用户可能需要知道如何解决这个问题。 接下来,常见的解决方法有哪些呢?我得主要有两种:一种是分析网页的API接口,直接请求数据接口;另一种是使用像Selenium这样的工具模拟浏览器行为,获取渲染后的页面。这两种方法各有优劣。分析API的话,效率高,但需要找到正确的接口,可能需要处理参数或者认证。而Selenium虽然方便,但比较重量级,速度慢,适合无法找到接口的情况。 然后,我需要给用户具体的步骤。比如,对于分析API的情况,可以打开浏览器的开发者工具,检查XHR请求,找到数据接口,然后用requests来模拟请求。这时候可能需要处理headers、参数,甚至可能需要处理分页或者加密参数。比如,举一个例子,假设某个网站的数据是通过Ajax加载的,返回JSON格式的数据,用户就可以用requests.get或者post来获取,然后解析JSON。 另一个方法是使用Selenium。这时候需要安装浏览器驱动,比如ChromeDriver,配置环境,然后用代码控制浏览器打开页面,等待动态内容加载完成,再提取数据。这里可能需要用到WebDriverWait和expected_conditions来确保元素加载完成,避免因为页面加载慢导致的元素找不到的问题。 还有第三种方法,提到requests-html库,它结合了requests和简单的渲染功能,可能适合一些不太复杂的动态内容。不过这个库现在可能不太流行,或者维护不够,所以可能需要提醒用户根据实际情况选择。 在步骤讲解的时候,需要分点说明,比如第一步分析API,第二步处理动态内容,第三步使用无头浏览器。每个步骤给出示例代码,并解释关键点,比如设置请求头中的User-Agent,处理可能的机制,如Referer、Cookie等。 同时,注意事项也很重要。比如,遵守网站的robots.txt,设置合理的请求间隔,避免被封IP。还有动态页面爬取的法律和道德问题,必须确保用户有权限爬取目标数据,不侵犯隐私或版权。 用户可能的疑问点包括:如何找到API接口?如何处理动态加载的参数,比如时间戳或加密token?如何处理分页?如何应对措施,比如验证码或者IP封锁?在示例代码中,可能需要简化这些部分,但应该提到可能需要进一步处理的情况。 比如,在示例代码中,可能只是简单的get请求,但实际情况可能需要构造更复杂的参数,或者处理POST请求,携带特定的数据。这时候需要指导用户如何通过分析网络请求来构造正确的参数。 使用Selenium的例子中,可能需要说明如何定位元素,使用CSS选择器或XPath,以及等待策略,显式等待和隐式等待的区别,避免使用time.sleep导致效率低下。 最后,总结一下,根据不同的情况选择合适的方法。如果数据通过API返回,优先使用直接请求API的方式;如果无法找到API或者页面复杂,再考虑使用Selenium等工具。同时,提醒用户注意合法合规,尊重网站的规定。</think>### 如何用 Python 爬取动态页面? 动态页面(通过 JavaScript 异步加载数据)的爬取需要特殊方法,以下是分步解决方案: --- #### **方法 1:分析 API 接口(推荐)** 动态页面通常通过 Ajax 或 Fetch API 从后端请求数据。 **步骤**: 1. **打开浏览器开发者工具**(F12),进入 **Network** 选项卡,筛选 **XHR/Fetch** 请求。 2. **找到数据接口**:观察页面加载时发送的请求,找到返回目标数据的 URL。 3. **模拟请求**:用 Python 的 `requests` 库直接调用该接口。 **示例代码**: ```python import requests # 目标 API 接口(需自行分析替换) url = "https://api.example.com/data" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Referer": "https://example.com/" } response = requests.get(url, headers=headers) data = response.json() # 假设返回 JSON 格式数据 print(data) ``` --- #### **方法 2:使用 Selenium 模拟浏览器** 若无法找到 API 接口,可通过无头浏览器渲染页面。 **步骤**: 1. 安装依赖: ```bash pip install selenium # 下载对应浏览器驱动(如 ChromeDriver) ``` 2. 编写代码控制浏览器行为。 **示例代码**: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 配置无头模式 options = Options() options.add_argument("--headless") # 不显示浏览器窗口 driver = webdriver.Chrome(options=options) driver.get("https://example.com/dynamic-page") # 等待动态内容加载(最多 10 秒) element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "target-class")) ) # 提取数据 content = driver.page_source print(content) driver.quit() ``` --- #### **方法 3:使用 requests-html(轻量级渲染)** 适用于简单动态页面,结合 requests 和 JavaScript 渲染。 **示例代码**: ```python from requests_html import HTMLSession session = HTMLSession() response = session.get("https://example.com/dynamic-page") response.html.render(sleep=2) # 渲染 JavaScript,等待 2 秒 title = response.html.find("#title", first=True).text print(title) ``` --- ### **注意事项** 1. **机制**: - 设置合理的请求头(如 `User-Agent`, `Referer`)。 - 使用代理 IP 池(如 `requests` + `proxies` 参数)。 2. **合法性**: - 检查目标网站的 `robots.txt`。 - 避免高频请求,添加延迟(如 `time.sleep(1)`)。 3. **动态参数**: - 若 API 需要加密参数(如 `token`),需逆向分析 JavaScript 生成逻辑。 --- ### **总结** - **优先分析 API 接口**:高效且节省资源。 - **复杂页面用 Selenium**:适合需要交互(如点击按钮)的场景。 - **轻量级需求用 requests-html**:简单快速,但功能有限。 根据实际需求选择方法,并遵守网络爬虫的合法性和道德规范。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值