Heim > Backend-Entwicklung > Python-Tutorial > Python verwendet Phantomjs, um die Webseite nach dem Rendern von JS zu crawlen

Python verwendet Phantomjs, um die Webseite nach dem Rendern von JS zu crawlen

大家讲道理
Freigeben: 2016-11-07 09:59:11
Original
1407 Leute haben es durchsucht

Ich musste kürzlich eine Website crawlen, aber leider wurden alle Seiten nach dem JS-Rendering generiert. Gewöhnliche Crawler-Frameworks konnten damit nicht umgehen, also dachte ich darüber nach, Phantomjs zum Erstellen eines Proxys zu verwenden.
Es scheint keine vorgefertigte Bibliothek eines Drittanbieters für Python zum Aufrufen von Phantomjs zu geben (falls vorhanden, informieren Sie bitte Xiao2). Nach einem Spaziergang stellte ich fest, dass nur Pyspider eine vorgefertigte Lösung bietet.
Nach einem kurzen Test habe ich das Gefühl, dass Pyspider eher ein Crawler-Tool ist, das für Anfänger entwickelt wurde, wie eine alte Dame, manchmal akribisch, manchmal gesprächig.
Leichte Gadgets sollten auch beliebter sein, ohne dass ich PyQuery lernen muss (Pyspider wird zum Parsen von HTML verwendet), ganz zu schweigen davon, dass ich schlechte Erfahrungen mit dem Schreiben von Python machen muss. .
Also habe ich einen Nachmittag damit verbracht, den Teil von Pyspider herauszunehmen, der den Phantomjs-Agenten implementiert, und ihn in ein kleines Crawler-Modul umzuwandeln. Ich hoffe, es wird allen gefallen (danke Binux!).

Vorbereitung

Natürlich braucht man Phantomjs, Unsinn! (Am besten verwenden Sie supervisord zum Schutz unter Linux. Phantomjs muss beim Abrufen geöffnet bleiben)

Beginnen Sie mit phantomjs_fetcher.js im Projektpfad: phantomjs phantomjs_fetcher.js [Port]

Installation Tornado-Abhängigkeiten (unter Verwendung des httpclient-Moduls von Tornado)

Der Aufruf ist super einfach

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)')
Nach dem Login kopieren


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage