zoukankan      html  css  js  c++  java
  • 解决不能右键查看元素的问题, 转载:https://mp.weixin.qq.com/s/V_fpPN62Kdf0bz6zgFpVCg

    爬取网址是:https://www.compassedu.hk/qs_2016

    爬静态网页第一步要查看网页源码,但是我发现无论怎么点鼠标右键都没反应,最终判定是鼠标右键被网页用js代码禁用了

    于是我用快捷键F12(或ctrl+shift+i)打开网页元素,本以为问题就这样解决了,但是又遇到了新的问题

    快捷键打开的网页元素是无法准确定位的,例如,假如我想查看“麻省理工学院”的具体位置,正常情况下直接右键-查看元素,就能看到了

    而现在只能一行一行去找,这显然是不行,必须想办法破解js禁用右键

    经过分析,我找到了2种方法,这里以火狐浏览器为例,给大家讲解一下:

    方法一:

    按F12,打点击控制台(Chrome是console),输入以下内容后按回车:

    javascript:alert(document.onselectstart = document.oncontextmenu= document.onmousedown = document.onkeydown= function(){return true;});

    图片

    方法二:

    按F12,打点击控制台(Chrome是console),输入以下内容后按回车:

    javascript:(function() { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R("contextmenu"); R("click"); R("mousedown"); R("mouseup"); R("selectstart");})() 

    图片

    按以上步骤操作完,发现右键就能用了,但是这时已经过去了20分钟。。。

    于是我迅速写好爬虫,并将数据保存至表格,就在我以为就要大功告成的时候,结果又出现新的问题

    代码如下:

    import requests
    from bs4 import BeautifulSoup
    url='https://www.compassedu.hk/qs_2015'
    response=requests.get(url)
    response.encoding='utf-8'
    soup=BeautifulSoup(response.text,'html.parser')
    ranks=soup.find('table',id='rk')
    print(ranks)
    <table aria-describedby="rk_info" class="rank-items dataTable no-footer" id="rk" role="grid">
    <thead><tr class="header" role="row" style="980px;">
    <th class="sorting_disabled" colspan="1" rowspan="1" style="50px">Ranking</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="230px;text-align: center;">University Name</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="93px;">Country/Region</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="78px;">Academic Reputation</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="90px;">Employer Reputation</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="66px;">Faculty Student</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="79px;">International Faculty</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="75px;">International Students</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="71px;">Citations per Faculty</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="58px;">Overall Score</th>
    <th class="sorting_disabled" colspan="1" rowspan="1" style="89px">Free</th></tr></thead><tbody>
    <tr class="odd" role="row" style="font-family:'Times new Roman',宋体">
    <td style="50px">1</td>
    <td style="230px;text-align:left;"><a href="//www.compassedu.hk/univ_85_12" target="_blank">麻省理工学院<br/>Massachusetts Institute of Technology</a></td>
    <td style=" 93px;">United Sta</td></tr></tbody></table>

    发现bs4解析返回后的网页元素中,只有"麻省理工学院"一条信息,这也太奇怪了吧

    刚开始以为是元素定位不对,试了多次都是这么个情况

    最后,突然灵机一动,可能是网页解析方式的问题,于是去网上查了一下:

    图片

    果然是有bug,我也懒的深究了,就赶紧把'html.parser'换成'lxml':

    import requests
    from bs4 import BeautifulSoup
    url='https://www.compassedu.hk/qs_2015'
    response=requests.get(url)
    response.encoding='utf-8'
    soup=BeautifulSoup(response.text,'lxml')
    ranks=soup.find('table',id='rk')
    print(ranks)
     

    这下就正常了,但是时间已经过去了半个多小时

  • 相关阅读:
    Linux 命令
    oracle sqlplus链接和sid
    sql 应用记录
    数据库接口基础类 oracle,sql server
    oracle 触发器
    js json -> <-object
    Docker学习总结(三)--常用命令
    MySQL之binlog日志
    Redis学习总结(九)-- Redis常用技巧
    Redis学习总结(八)--Redis云平台
  • 原文地址:https://www.cnblogs.com/testzcy/p/14390880.html
Copyright © 2011-2022 走看看