js 抓取网页内容( 2016年05月13日Linux下最好用supervisord守护者)
优采云 发布时间: 2022-04-04 16:05js 抓取网页内容(
2016年05月13日Linux下最好用supervisord守护者)
Phantomjs渲染JS后抓取网页(Python代码)
更新时间:2016-05-13 09:09:10 投稿:hebedic
phantomjs:我的理解是它是一个不显示的浏览器,也就是说它基本上可以做浏览器能做的任何事情,只是它不能显示页面的内容。让我们利用他做一些有趣的事情
最近需要爬取某个网站,可惜页面都是JS渲染后生成的,普通爬虫框架处理不了,于是想到了用Phantomjs搭建代理。
貌似没有现成的Python调用Phantomjs的第三方库(如果有,请告知小编)。逛了一圈,发现只有pyspider提供了现成的解决方案。
经过简单的试用,感觉pyspider更像是新手的爬虫工具,像妈妈一样,时而细致,时而喋喋不休。轻量级的小玩意应该更受欢迎,我也有点自私。可以一起使用我最喜欢的BeautifulSoup,而不用学习PyQuery(pyspider是用来解析HTML的),也不必忍受浏览器写Python。糟糕的经历(窃笑)。
于是花了一个下午的时间,拆解了pyspider实现Phantomjs代理的部分,做成了一个小的爬虫模块。我希望每个人都会喜欢它(感谢 binux!)。
准备好工作了
当然你有 Phantomjs,废话!(Linux下最好使用supervisord来守护,爬取时必须保持打开Phantomjs)
以项目路径中的 phantomjs_fetcher.js 开头:phantomjs phantomjs_fetcher.js [port]
安装 tornado 依赖项(使用 tornado 的 httpclient 模块)
调用超级简单
from tornado_fetcher import Fetcher
# 创建一个爬虫
>>> fetcher=Fetcher(
user_agent='phantomjs', # 模拟浏览器的User-Agent
phantomjs_proxy='http://localhost:12306', # phantomjs的地址
poolsize=10, # 最大的httpclient数量
async=False # 同步还是异步
)
# 开始连接Phantomjs的代码,可以渲染JS!
>>> fetcher.fetch(url)
# 渲染成功后执行额外的JS脚本(注意用function包起来!)
>>> fetcher.fetch(url, js_script='function(){setTimeout("window.scrollTo(0,100000)}", 1000)')
代码