以下是我试图搜集的网页链接:
https://www.simplyhired.ca/search?q=data+analyst&l=vancouver%2c+bc&job=grivojsfwcvast2rpqgq_ybes-tw6bcz9inhdihbt92xtkcbbcxp8g%27
更具体地说,我正试图在页面上删除“资格”元素。
打印soup对象时,我看不到右窗格的html代码。
有没有想过我该如何访问这些元素?
提前谢谢!
以下是我试图搜集的网页链接:
https://www.simplyhired.ca/search?q=data+analyst&l=vancouver%2c+bc&job=grivojsfwcvast2rpqgq_ybes-tw6bcz9inhdihbt92xtkcbbcxp8g%27
更具体地说,我正试图在页面上删除“资格”元素。
打印soup对象时,我看不到右窗格的html代码。
有没有想过我该如何访问这些元素?
提前谢谢!
1条答案
按热度按时间e7arh2l61#
您尝试刮取的页面的dom元素是使用javascript异步填充的。换句话说,当服务器向您提供页面文档时,您试图获取的信息实际上并没有被烘焙到html中,因此beautifulsoup看不到它—您得到的文档只是一个“基本”模板,通常在浏览器中查看时,会通过javascript填充,从不同的地方获取所需的信息。您可以期望大多数现代的、动态的网站都以这种方式实现。beautifulsoup只适用于那些内容在服务器提供给您时被烘焙到html中的页面。当在浏览器中查看时,页面的某些元素需要一些时间来加载,这一事实是一种即时的泄露——每当您看到这种情况时,您的第一个想法应该是“dom是使用javascript异步填充的。“美女们不会为这个工作的”。如果它是一个单页应用程序,您可以忘记beautifulsoup。
在浏览器中访问页面时,我记录了我的网络流量,并看到它发出了多个xhr(xmlhttprequest)httpget请求,其中一个请求是到一个restapi,该api提供json,其中包含您要查找的所有作业信息。您所需要做的就是使用相同的查询字符串参数(api似乎不关心请求头,这很好)模拟对同一api url的httpget请求。无需添加 selenium 或 selenium :
输出:
有关记录网络流量、查找api url和探索json响应中所有可用信息的更多信息,请参阅我的另一个答案。