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)')