网页抓取 - 执行“全选复制”而不是HTML解析
我需要一些建议,关于如何从一个网页上获取数据,而不使用普通的HTML解析。这个数据是通过一些后台脚本和服务器方法渲染到屏幕上的,我似乎无法搞清楚这些。虽然我经常使用BeautifulSoup和Selenium,但这次的输出结果却不一样。
这个网页非常简单且静态。虽然我无法让BeautifulSoup和Selenium正常工作,但手动“全选复制”却能完美运行。(没错,就是那个老办法!)
有没有什么建议可以帮助我自动化这个过程?基本上就是 - > 访问网站,点击“复制全部”,然后把数据返回到Python中,或者保存到文件里以备存档。
我尝试了很多不同的方法用BeautifulSoup和Selenium,但只获取到部分数据。我觉得这个渲染是作为一种“反盗版”手段。我以前和这个网站斗争过很多次,他们发布数据的方式似乎故意不一致。随机情况下,如果我手动“复制/粘贴”,这个网站就能完美工作,但这并不是自动化的。
1 个回答
1
你在页面上看到的数据是从不同的网址以CSV
格式加载的。要加载这些数据,你可以参考这个例子:
from io import StringIO
import pandas as pd
import requests
url = "https://datawrapper.dwcdn.net/vEKjO/39/dataset.csv"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0"
}
data = requests.get(url, headers=headers).text
df = pd.read_csv(StringIO(data), sep="\t")
print(df)
输出结果是:
Unnamed: 0 Feb-24 Jan-24 Dec-23 Nov-23 Oct-23 Sep-23 Aug-23
0 NaN % % % % % % %
1 ECONOMIC PROBLEMS (NET) 30 34 32 33 38 34 31
2 Economy in general 12 12 14 13 14 16 15
3 High cost of living/Inflation 11 13 12 10 14 9 8
4 Federal budget deficit/Federal debt 3 2 2 3 4 3 2
5 Taxes 2 1 1 1 * 1 *
6 Unemployment/Jobs 2 2 2 2 2 3 2
...