设为首页 收藏本站
查看: 747|回复: 0

[经验分享] 利用Selenium制作python数据抓取,以及对Selenium资源介绍

[复制链接]

尚未签到

发表于 2015-11-29 12:28:51 | 显示全部楼层 |阅读模式
  当当当~第三篇博客开始啦~
  这次的话题是数据抓取。终于到了核心部分的探讨,我的心情也是非常激动啊!如果大家baidu或者google(如果可以的话)数据抓取或者data crawling,将会找到数以千计的例子。但是大多数的代码非常的冗长,并且许多代码还是抓取静态数据之后,对动态JS写成的数据却毫无办法。或者,利用HTML解析网址后,再找到JS写的数据页面来寻找到所想要的数据。  
    但是!不知各位是否有发现过,如果打开chrome或者safari或者各种浏览器的审查元素。网页上能看到的数据,其实都会载到里面。可当转移到源代码的时候,JS写成的数据却都消失了!可我们为什么要从源代码中找数据,却不直接从审查元素中找呢?带着这个问题,我历经千险,穿越了各种国外的社区论坛以及插件包,终于找到了答案。
    首先介绍今天的主角!


  • interpreter:Selenium
  • app:PhantomJS
  既然是interpreter,Selenium是可以按照我第一篇博客的做法下载的。PhantomJS呢,可以直接通过我给的链接里面进行下载。当两个都安装完毕,就能正式地开始进行数据抓取了。当然例子就是我的博客啦~
  首先上范例代码



#-*-coding:utf-8-*-#
from selenium import webdriver
def crawling_webdriver():
#get local session of PhantomJS
driver = webdriver.PhantomJS(executable_path='/Users/***/phantomjs/bin/phantomjs', port=65000)
driver.set_window_size(1024, 768) #optional
driver.get("http://www.cnblogs.com/Jerrold-Gao/") # Load page
#start crawling data
data=driver.find_element_by_id("sidebar_scorerank").text
  #print to check my result
print(data)
  #quit the driver
    driver.quit()
if __name__ == '__main__':
crawling_webdriver()

  
  是否有被python精简的语言惊叹到呢?这就是python插件功能包的强大之处。
  我需要提醒几个注意点:一、PhantomJS的路径和端口是一定要寻找的。在国内某篇文章中不知为何去掉了路径和端口,神奇的是,居然程序还能运行。我试了几回,都无法像它一样运行。二、请务必在最后quit driver,不然对内存的占用是会越来越大的。
    这样的代码就可以对本页面的数据进行抓取了,结果是:
   DSC0000.png
  
  可是,如果是想抓取超级链接呢?通过以上的代码,依样画葫芦,仍然是找不出来的。这里有个简单的技巧:



#crawling a link
data=driver.find_element_by_id("homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0")
url=data.get_attribute("href")
  将id属下的区块,提取出href的部分,就能找到链接了。这里找到的是:
DSC0001.png
  =================================这里是另起主题的分割线===================================
  
  关于Selenium,无论是国内还是国外,都算火过一阵子了。比起openpyxl,它在主页上的注释也清晰很多。这里介绍几个我觉得比较好用的资源。
  由于它官网莫名掉线,所以首当其冲的资源就是python-Selenium站了,上面有很多对代码的注解,十分实用。
  其次,对国内的同学来说,最好的网站便是中文站了,虽然人数不是很多,但是讨论还是挺丰富的。
  最后,便是万能的stackoverflow啦,国内上这个站速度总是有点慢,其实还是很怨念的。
  
  =================================我是来返场的分割线======================================
  
  本日吐槽:有次和友人逛博物馆。朋友说,博物馆其实好奸诈,一大面雪白的墙挂一幅画,你看到画后也不会立刻有比较对象,就会觉得“这好有艺术感啊”的奇妙感觉。我回答说,就和西欧的料理一样嘛,一个大白盘摆一小叠食物,感觉就会很精致的。朋友深表赞同地说,对啊,这么大的留白,摆什么都好看。我低头轻轻笑了一下,说,什么时候把我的代码也挂上去。
  
            在家随便做的法式甜酒鸭胸肉(Magret de Canard)
   DSC0002.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144914-1-1.html 上篇帖子: Python中类的属性的访问控制 下篇帖子: Spark处理Json格式数据(Python)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表