"在这一篇文章中,我们将使用 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