——利用Phantomjs和PySpider就可以抓取通过JavaScript渲染的网页啦
先来解释一下框架中的代码结构:
定义一个Handler类,它继承于父类BaseHandler,里面包含三个函数:on_start()进入目标网站,返回索引页html代码并传给index_page();index_page()对索引页html代码进行解析,返回解析结果并传给detail_page();detail_page()对详情页进行解析便返回详细信息。
1 from pyspider.libs.base_handler import * 2 3 class Handler(BaseHandler): 4 crawl_config = { 5 } 6 7 @every(minutes=24*60) # 表示on_start()每24h执行一次,就能抓取到最新网页 8 def on_start(self): 9 # __start_url__为要爬取的目标网址,callback指定解析response的方法,即调用index_page()函数 10 self.crawl('__start_url__', callback=self.index_page) 11 12 @config(age=10*24*60*60) # 表示on_start()爬取的页面十天内有效,不会再次进行爬取 13 def index_page(self, response): 14 # 内置封装了PyQuery对response进行解析 15 for each in response.doc('a[href^="http"]').items(): 16 self.crawl(each.attr.href, callback=self.detail_page) 17 18 19 def detail_page(self, response): 20 return{ 21 'url': response.url, 22 'title': response.doc('title').text() 23 }
注意:
当@every和age同时被设置时,请求会每天被触发一次,但是在有效周期(age)内,请求会被丢弃,只有过期才能重新启动。