【发布时间】:2020-10-02 03:21:23
【问题描述】:
我试图在选择某个部门时获取https://zotistics.com/ 的代码,例如在部门下拉菜单中选择“化学”会显示一个新图表。问题是我不知道如何通过正常方式提取 HTML 代码,因为当我选择新部门时 URL 不会改变。
有什么方法可以在搜索发生后检索网站的代码?我希望能够根据部门/教师收集 GPA 统计数据。
谢谢!
【问题讨论】:
标签: java web-scraping
我试图在选择某个部门时获取https://zotistics.com/ 的代码,例如在部门下拉菜单中选择“化学”会显示一个新图表。问题是我不知道如何通过正常方式提取 HTML 代码,因为当我选择新部门时 URL 不会改变。
有什么方法可以在搜索发生后检索网站的代码?我希望能够根据部门/教师收集 GPA 统计数据。
谢谢!
【问题讨论】:
标签: java web-scraping
问题在于选择要显示的图形所需的参数不是通过 url 从浏览器传递到服务器,而是由 headers 和 body 作为 formUrlEncoded 传递的。
以下是影响 html 页面呈现的这些参数:
Cookie
csrf_token
selectDep
1 如何获取这些参数的有效值并改变页面的显示?
selectDep:只要你想要的图表类型就很容易(例如“化学”)
要获得其他 2 个参数,您应该首先向 https://zotistics.com/ 发出 GET 请求,然后您可以拥有 Cookie 和 csrf_token :Cookie :要获得它,请从该 GET 请求的响应标头中获取它。csrf_token :为此,您应该进入该 GET 请求表单广告的响应正文中,从以下 html input 标记中获取值<input id="csrf_token" name="csrf_token" type="hidden" value="HERE IS THE VALUE you should grab">
2 使用这些参数
您应该向https://zotistics.com/ 发出POST 请求,设置cookie 值和其他参数(csrf_token、selectDep)
通过 formUrlEncoded。服务器将响应一个 HTML,其中有一个空容器用于画布 <div id="myChart"></div>,并且 Javascript 代码将填充它。所以需要有手段执行返回的HTML + CSS + JS(嵌入java的浏览器)查看渲染的HTML并提取栏的html代码。
【讨论】:
所以有一些问题。首先,因为下拉菜单不是链接,并且它们不会指向另一个页面,所以很难在不先物理单击它的情况下刮掉化学选项卡或任何其他选项卡,这可以使用 java 使用 Robot() 类来完成,但是,即使您能够做到这一点,下一个任务也很困难。我假设您希望在单击下拉项后显示图表中的数据,这很困难,因为图表是使用 <canvas> 标签创建的,这意味着图表是使用 JavaScript 绘制的,也意味着您的数据are searching 可能在链接的 .js 文件中(如果是这样,您不太可能访问该数据),但如果不是,则在理论上可以搜索到的 <script> 标记中。我不认为爬取这个网站是不可能的,但是你绝对应该花时间研究 Zotistics 是否有一个 API 可以大大简化这个。
【讨论】: