Python中如何通过CSS改变网页显示数据并获取真实数据?
比如这个网站: https://www.smm.cn/ ,然后通过页面查看的数据是正确的,程序抓到的值就是错的,这些错误的元素都有一个 css,class="change_price"。
Python中如何通过CSS改变网页显示数据并获取真实数据?
我理解你的问题是想在Python里通过CSS来修改网页的显示内容,同时还能获取到网页背后真实的数据。这其实涉及两个不同的场景,我分开来说:
1. 修改网页显示(前端操作)
如果你想用Python动态改变浏览器里网页的CSS样式,通常得配合浏览器自动化工具。直接用requests这种库是做不到的,因为它只处理HTTP请求,不渲染页面。这里给你个用Selenium的完整例子:
from selenium import webdriver
from selenium.webdriver.common.by import By
# 启动浏览器
driver = webdriver.Chrome()
driver.get("https://example.com")
# 通过CSS选择器找到元素并修改样式
element = driver.find_element(By.CSS_SELECTOR, "#some-id")
driver.execute_script("arguments[0].style.color = 'red';", element)
driver.execute_script("arguments[0].style.display = 'none';", element)
# 或者直接注入整个CSS样式
css_style = """
#target-element {
background-color: yellow !important;
font-size: 20px;
}
"""
driver.execute_script(f"var style=document.createElement('style');style.innerHTML=`{css_style}`;document.head.appendChild(style);")
driver.quit()
2. 获取真实数据(后端抓取) CSS只能改变视觉呈现,真实数据通常来自:
- 初始HTML源码
- AJAX请求返回的JSON/XML
- 页面JavaScript生成的数据
用requests配合解析库就能拿到原始数据:
import requests
from bs4 import BeautifulSoup
import json
# 获取页面初始数据
response = requests.get("https://example.com/data-page")
soup = BeautifulSoup(response.text, 'html.parser')
hidden_data = soup.find("div", {"class": "data-container"}).get("data-json")
# 解析动态加载的数据
api_response = requests.get("https://api.example.com/data")
real_data = json.loads(api_response.text)
关键点:CSS修改只是视觉层的改变,不影响实际数据。要获取数据,得分析网页源码、网络请求或数据属性。如果页面数据是JS动态渲染的,可能需要用Selenium等工具先执行JS再提取。
简单说:改显示用浏览器自动化,拿数据直接解析源码或接口。
font-family: ‘font2regular’
谢谢,看了一下,确实是这样的。知道了这个对应关系也可以解决了,但是这个对应关系也可能会调整的,所以有没有什么稳定的解决办法?
长见识了
你看下 change_price 下面的样式,里面应用了一个字体,你在看这个字体。
这个是典型的字体防抓站的效果,但是很容易 mapping 1234567890 => 2071386549
但是这个 mapping 关系不是容易修改字体而改变么。所以你可以每次抓的时候连同字体文件一并抓下来。
如果真不信就上 ocr,对于这种纯数字很成熟的。
谢谢,不太理解,1.连同字体文件都抓取过来; 2.上 OCR 是两种解决方法?
OK,知道了,目前最好的解决办法只能这样吗?解析字体文件?
天才,学习了
找到映射关系直接逆向,666
字体防抓,666。
确实是他所用的 font2regular 字体问题,
这个还是不要去修改他的字体,
否则无论你怎么去复制,一旦进入到其他编辑状态下,字体一变都是错误的
他正常输入数据,用程序 /字体反译到网页数据,然后又通过这款字体再解回到显示页面
所以你只能在抓取数据后再替换一下
如在 Excel 或批处理中通过定义命令,替换成正确数据才可以正常复制剪切使用
具体替换参数见 5 楼数据
抓取的时候数字替换一下就行了。
这个关系我也看到了,可是关系变化了怎么办?
如果对应关系经常换就没什么想法
刚才人肉修改了下
文本节点: 0123456789
显示: 9207138654

字体文件也是这样对应的…



