"在这一篇文章中,我们将使用 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 Files\Google\Chrome\Application\chrome.exe'
下面是另一端参考代码:
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