网页抓取 - 执行“全选复制”而不是HTML解析

-2 投票
1 回答
34 浏览
提问于 2025-04-14 15:31

我需要一些建议,关于如何从一个网页上获取数据,而不使用普通的HTML解析。这个数据是通过一些后台脚本和服务器方法渲染到屏幕上的,我似乎无法搞清楚这些。虽然我经常使用BeautifulSoup和Selenium,但这次的输出结果却不一样。

这个网页非常简单且静态。虽然我无法让BeautifulSoup和Selenium正常工作,但手动“全选复制”却能完美运行。(没错,就是那个老办法!)

有没有什么建议可以帮助我自动化这个过程?基本上就是 - > 访问网站,点击“复制全部”,然后把数据返回到Python中,或者保存到文件里以备存档。


我尝试了很多不同的方法用BeautifulSoup和Selenium,但只获取到部分数据。我觉得这个渲染是作为一种“反盗版”手段。我以前和这个网站斗争过很多次,他们发布数据的方式似乎故意不一致。随机情况下,如果我手动“复制/粘贴”,这个网站就能完美工作,但这并不是自动化的。

https://datawrapper.dwcdn.net/vEKjO/39/

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

...

撰写回答