从零开始学Python-使用Selenium抓取动态网页数据

2024-04-29 12:33

1. 从零开始学Python-使用Selenium抓取动态网页数据

     AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。  
       因为传统的网页在传输数据格式方面,使用的是   XML  语法,因此叫做  AJAX  ,其实现在数据交互基本上都是使用  JSON  。使用AJAX加载的数据,即使使用了JS将数据渲染到了浏览器中,在  右键->查看网页源代码  还是不能看到通过ajax加载的数据,只能看到使用这个url加载的html代码。 
       法1:直接分析ajax调用的接口。然后通过代码请求这个接口。  
       法2:使用Selenium+chromedriver模拟浏览器行为获取数据。  
        Selenium  相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。  chromedriver  是一个驱动  Chrome  浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver: 
       现在以一个简单的获取百度首页的例子来讲下   Selenium  和  chromedriver  如何快速入门: 
     
     参考:Selenium的使用  
     
     直接直接分析ajax调用的接口爬取  
     selenium结合lxml爬取  

从零开始学Python-使用Selenium抓取动态网页数据

2. Python+Selenium 元素获取及使用心得

1、获取输入框再输入信息的时候,发现send_keys会把内容输入到所获取输入框的隔壁框框(比如下一个框),排查一大通后发现,是因为待输入的数据前面包含个空格(这空格在Excel里还看不出来),send_keys方法会连空格也输入进去,元素定位并没有不准,这空格就是输入“跳框”的元凶。
  
 解决的办法是检查待输入的源数据,strip去掉前后的空格。
  
 2、直接定位元素的方法,比如Xpath和CSS Selector虽然方便,但是用多了程序健壮性会变差。想想也是,比如新开的页面里,按钮多一个少一个,或者顺序位置发生变化,元素就选错了,后面肯定就不按剧本走了。
  
 这时候最好按id、class name来获取,如果不唯一,那就遍历循环判断(比如先找到父元素再遍历各个子元素),虽然程序运行效率会降低一些,但是程序跑起来的时候不容易挂。
  
 关于效率问题其实也不用太纠结,我都纯用Selenium了我还在乎啥效率啊(手动狗头)
  
 3、循环判断筛选元素的时候,get_attribute是个好东东,常见的比如text,scr,甚至onclick事件里的字符串都可以用来做判断。但是切记最好放在try里,遍历虽好,找到个空值就直接挂了。