vba抓取网页数据(元素的类被命名的事实-contextmenu是一个很大的提示)
优采云 发布时间: 2021-10-02 03:04vba抓取网页数据(元素的类被命名的事实-contextmenu是一个很大的提示)
元素的类被命名为 react-contextmenu-wrapper 是一个很大的提示。React 是一个用于创建用户界面的 JavaScript 库。
有很多方法可以填充网页上的元素。运气好的话,服务器会给你发一封.html的邮件,基本上什么都有——很容易用BeautifulSoup来爬取解析。
但是,许多现代 网站 使用 JavaScript 来动态填充网页元素。当您在浏览器中查看这样的页面时,这很好——但是如果您尝试抓取这样的页面,您最终会得到“裸骨”模板 .html,其中 DOM 尚未完全填充。这就是 BeautifulSoup 看不到这个元素的原因。
重点是:仅仅因为您可以在浏览器中看到一个元素,并不意味着 BeautifulSoup 将能够看到它。
我觉得每当你想爬一个网页的时候,你的第一个武器不应该是BeautifulSoup——你应该把BeautifulSoup作为最后的手段。您应该始终做的第一件事是检查您要抓取的页面是否已向 API 发出任何请求,并且该响应用于填充自身。如果是这样,您可以简单地模拟对同一 API 的请求并获取可能被抓取的所有内容。好像还不够好,这些API通常提供JSON,而且很容易解析。
这是你如何做到的:
在浏览器中打开网页。如果您使用的是谷歌Chrome浏览器,请按F12键访问开发者工具(其他现代浏览器应该也有类似功能。)打开“网络”选项卡。我们将使用 Chrome 的网络记录器记录此页面发出的所有请求。单击漏斗图标(激活时变为红色)以启用过滤。单击 XHR(这意味着仅查看 XMLHttpRequests。这是我们感兴趣的请求,因为我们希望看到对 API 的潜在传出请求——我们不想捕获对图像等资源的请求)按 Ctrl + E 或单击左上角的圆形记录按钮启用日志记录(此按钮在激活时也会变为红色。)按 Ctrl + R 刷新页面并开始记录流量。刷新后加载页面时,您应该会看到请求列表增长。它看起来像这样(对不起,大图):
就我而言,Spotify 在我记录流量时发送了 9 个 XHR 请求(在左侧)。我点击了其中的一些并检查了“标题”选项卡,直到找到一个“请求 URL”,看起来就像我在与 API 交谈(在这种情况下,“api”是 URL 的一部分)。
是时候使用请求编写一个简单的脚本了。您将复制“请求 URL”并确保复制一些似乎对请求同样重要的“请求标头”:
当我运行这个脚本时,我得到以下输出:
New Music Friday
After Hours
Colores
kelsea
Actions
Kid Krow
Walk Em Down (feat. Roddy Ricch)
Studio It’s Hits
Intentions (Acoustic)
Creep
Is Everybody Going Crazy?
2 Seater (feat. G-Eazy & Offset)
Roses/Lotus/Violet/Iris
Spotify Singles
Between Us (feat. Snoh Aalegra)
E.P.
Black Men Don’t Cheat (feat. Ari Lennox, 6LACK & Tink)
Think About You
Pray 4 Love
Acrobats
>>>
随时检查 API 返回的 JSON 对象——您可以在 Python 中执行此操作,也可以通过从 Chrome 开发人员工具中的“标题”选项卡切换到“预览”选项卡来查看 JSON 的内容。在我的示例中,我只是提取了主页上的歌曲名称,但是 JSON 对象收录了很多有趣的东西。也可以通过URL的查询字符串中的参数获取20多首歌曲,等等。