최근에 웹사이트를 크롤링해야 했는데, 아쉽게도 페이지가 모두 JS 렌더링 후에 생성되었습니다. 일반 크롤러 프레임워크로는 이를 처리할 수 없어서 Phantomjs를 사용하여 프록시를 구축하려고 했습니다.
Python이 Phantomjs를 호출할 수 있는 기성 타사 라이브러리가 없는 것 같습니다. (있는 경우 Xiao2에 알려주시기 바랍니다.) 산책 후에는 pyspider만이 기성 솔루션을 제공한다는 것을 알았습니다.
간단한 테스트 끝에 pyspider는 때로는 꼼꼼하고 때로는 수다스러운 노부인처럼 초보자를 위해 만들어진 크롤러 도구에 가깝다고 느꼈습니다.
경량 가젯은 더 인기가 있어야 합니다. 또한 Python을 작성하는 나쁜 경험은 고사하고 PyQuery를 배우지 않고도(pyspider는 HTML을 구문 분석하는 데 사용됨) 내가 가장 좋아하는 BeautifulSoup과 함께 사용하려는 약간 이기적인 의도도 있습니다. ).
그래서 나는 오후에 Phantomjs 에이전트를 구현하는 pyspider 부분을 분리하여 작은 크롤러 모듈로 만들었습니다. 모두가 좋아했으면 좋겠습니다(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.phantomjs_fetch(url) # 渲染成功后执行额外的JS脚本(注意用function包起来!) >>> fetcher.phantomjs_fetch(url, js_script='function(){setTimeout("window.scrollTo(0,100000)}", 1000)')