Python은 JS 렌더링 후 Phantomjs를 사용하여 웹 페이지를 크롤링합니다.

大家讲道理
풀어 주다: 2016-11-07 09:59:11
원래의
1387명이 탐색했습니다.

최근에 웹사이트를 크롤링해야 했는데, 아쉽게도 페이지가 모두 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)')
로그인 후 복사


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!