zoukankan      html  css  js  c++  java
  • C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(5)(selenium登场)

    "在这一篇文章中,我们将使用 python 一个著名的网页解析库 BeautifulSoup 来实现一个标准的 Handler,并使用 广度优先算法 让爬虫工作起来。"

    本来如上文预想,是要用bs4的,不过 bs4 这个库太简单了,网上教程都有, 所以改用 selenium 。

    selenium是一个著名的网站自动化测试的框架, 它能模拟 手工操作浏览器, 获取一些传统爬虫无法获取的网页内容(比如通过js+ajax 后期加载的一些网页内容)。


    本文将使用selenium 的 rc 版本 ,即远程控制版本,具体来说是一个jar 包, 为了运行selenium必须装好java runtime , 并在selenium.jar包的目录下运行命令行 

    java -jar selenium-server.jar

    这个命令行还可以加些参数设置请求网页的超时时间。


    运行正常的话会出一个控制台,然后就是在python中装好selenium的包

    from selenium import selenium

    然后调用api来控制selenium rc,selenium rc再调用指定的浏览器。在api中定位标签需要用到XPATH,网页元素的xapth可以通过一个firefox插件获取,具体自己搜吧。


    下面给段代码:

    import Handler.BaseHandler
    from selenium import selenium
    import time
    
    
    class SeleniumHandler(Handler.BaseHandler.BaseHandler):
        def __init__(self):
            super(SeleniumHandler, self).__init__()
            #config begin
            self.host = 'localhost'
            self.port = 4444
            self.baseurl = 'http://huati.weibo.com/'
            # self.browserpath='*firefox3 D:/Program Files/Mozilla Firefox/firefox.exe'
            self.browserpath = '*googlechrome C:Program FilesGoogleChromeApplicationchrome.exe'

    上面是初始化的代码,4444是selenium rc监听指令的端口,也可以通过命令行参数来改。一个selenium对象的实例只能爬一个域名。

    下面是另一端参考代码:


    def Handle(self, url, pbags):
            super(SeleniumHandler, self).Handle(url, pbags)
            if not self.s:
                self.s = selenium(self.host, self.port, self.browserpath, self.baseurl) #生成实例
                self.s.start()
                self.openpage('/')
                self.s.window_maximize()
            else:
                self.s.open(self.baseurl)
            self.topicpage = 1
            while True:
                try:
                    self.settopicurl()
                    self.gettopicinfo()
                except Exception as ext:
                    # error handle
                    print(ext.message)
                if self.topicpage < self.topicpagecount:
                    self.topicpage += 1
                    self.gotonexttopicspage(self.topicpage)
                else:
                    break
            self.TopiclistHandler()
    


    再推荐一个详解selenium的链接,有兴趣的同学可以了解下

    http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html

  • 相关阅读:
    python之《set》
    python之 《zip,lambda, map》
    python之 socketserver模块的使用
    iOS FMDB小试了一下
    人生要自强不息-路遇瞎子感悟
    iOS Node Conflict svn冲突
    iOS 隐藏Status Bar
    iOS NSURLSession 封装下载类
    iOS NSFileManager
    iOS prototype Cells
  • 原文地址:https://www.cnblogs.com/rav009/p/5131142.html
Copyright © 2011-2022 走看看