どうやってCSDNのトップページのパンツをすり抜けるか見てみましょう(python selenium+phantomjsはCSDNのトップページの内容を登ります)
2365 ワード
ここでは、ページの内容を動的にロードするキャプチャを学習するだけで、すべてのページには適用されません.
使用するツールはpython seleniumとphantomjsで、デバッグ時にfirefoxのgeckodriverも使用しました.exe.
まずfirefoxでコンテンツを動的にデバッグしたり、要素をキャプチャしたりする方法を学びました.これは実際にはホームページの自動化テストでかなり実用的で、テストの学生が毎日業務ページを繰り返しクリックしたり、入力したりするのがどれだけ苦しいかを考えてみましょう.
最初はうまくいかなかった.phantomjsとfirefoxのデバッグロードのダイナミックコンテンツはソースコードに何の体現もできないので、最初のgetページの内容を見つけるしかなく、エントリは30本ぐらいで、各種のドロップダウンロード、各種の研究ソースコードは、いずれも失敗に終わった.
最終的にchromeの開発ツールでページコンテンツにロードされたapiアドレスを見つけました.
コードは次のとおりです.
使用するツールはpython seleniumとphantomjsで、デバッグ時にfirefoxのgeckodriverも使用しました.exe.
まずfirefoxでコンテンツを動的にデバッグしたり、要素をキャプチャしたりする方法を学びました.これは実際にはホームページの自動化テストでかなり実用的で、テストの学生が毎日業務ページを繰り返しクリックしたり、入力したりするのがどれだけ苦しいかを考えてみましょう.
最初はうまくいかなかった.phantomjsとfirefoxのデバッグロードのダイナミックコンテンツはソースコードに何の体現もできないので、最初のgetページの内容を見つけるしかなく、エントリは30本ぐらいで、各種のドロップダウンロード、各種の研究ソースコードは、いずれも失敗に終わった.
最終的にchromeの開発ツールでページコンテンツにロードされたapiアドレスを見つけました.
https://www.csdn.net/api/articles?type=more&category=home&shown_offset=0
の後はやりやすいので、まずphantomでトップページをロードしてからapiアドレスにアクセスして、apiのstatusがfalseになるまでループして、トップページのお勧めのパンツは基本的にすり落としました......コードは次のとおりです.
# coding=utf8
import json
import os
import sys
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
reload(sys)
sys.setdefaultencoding("utf-8")
if os.path.exists("csdn_home.txt"):
os.remove("csdn_home.txt")
print "csdn_home.txt removed"
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap[
"phantomjs.page.settings.userAgent"] = "Mozilla / 5.0 (Windows NT 10.0 Win64 x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 63.0.3 239.132 Safari / 537.36"
br = webdriver.PhantomJS()
br.get("https://www.csdn.net/")
data = br.find_elements_by_xpath('//ul/li[@class="clearfix"]/div/h2/a')
print len(data)
with open("csdn_home.txt", "a") as f:
for title in data:
print title.text
f.write(title.text + '
')
print title.get_attribute('href')
f.write(title.get_attribute('href') + '
')
while True:
br.get("https://www.csdn.net/api/articles?type=more&category=home&shown_offset=0")
data = json.loads(br.find_element_by_xpath('//pre').text)
if data["status"] == "false":
break
else:
for i in data["articles"]:
print i["title"]
f.write(i["title"] + '
')
print i["url"]
f.write(i["url"] + '
')
f.close()
br.quit() # phantomjs, phantomjs , cpu