必要' restclientを'
必要' オープン-URI '
必要' open_uri_redirectionsが'
必要' 鋸山'
必要' jsonの'
必要' YAML '
必要' のfileutilsは'
必要' base64で'
MAX_RETRY_TIMES = 5
ROOT_DIR = " /ホーム/亜鉛/仕事/小さなツールを-master / zlk / TU / '
BASE_URL = ' https://でnewceshiao。COM / mnkc / tiku /?ID = "
COOKIE = {:VerificationCodeNum => ' 1 '、:QZ_KSUser => ' ユーザーID = 15357507&ユーザー名= ppkao1520606811&はUserToken = cw05IVsvRbyxuPoQeQIU4%252bZNshdiFE%252fN6LGCVScB%252bnQLBUYAu7SA7A%253D%253D ' }
@cookie = ' VerificationCodeNum = 1。PPKAO = PPKAOSTIDの%3D987%26PPKAOCEID%の3D%26PPKAOSJID%3D%26UserName%3D%26EDays%3D '
@agent = " のMozilla / 5.0(X11;のLinux x86_64で)のAppleWebKit / 537.36(ヤモリ様KHTML)Ubuntuのクロム/ 63.0.3239.84クロム/ 63.0.3239.84サファリ/ 537.36 "
@content_type = " アプリケーション/ x-www-form-urlencodedで"
= Logger.new(' download_error.log ' )
@no_doc = Logger.new(' nodoc_error.log ' )
@parse_error = Logger.new(' parse_error.log ' )
File.existsない限りFileUtils.makedirs(ROOT_DIR)?ROOT_DIR
デフdownload_image(画像)
を開始
名 = Time.now.to_i.to_s + " %04D "%[ランド(10000 )]
サフィックス = image.sub(/.+\./、'' )
IMG =名+ " " +
ファイル。(オープン"サフィックス#{ROOT_DIR} /#{IMG} " " W ")を行う| F |
f.write(オープン(" #{画像} 」.read))
エンド
レスキュー例外 => eは
e.message置く
端
戻りIMGの
端
DEFをimg_base64(image_src)
ファイル = オープン(image_src).read
画像 = Base64.encode64(ファイル)
エンド・
デフget_doc(search_link)
retry_times = 0
のdocは = nilを
開始し
位DOC =鋸山:: HTML(オープン(search_link、
# "クッキー" => @cookie、
# "のUser-Agent" => @agent、
# "リファラー" =>「https://study.chinaedu.com/megrez/synchronous/list.do?gradeCode=0201&specialtyCode=02 」
# "ホスト" => "study.chinaedu.com"、
# :allow_redirections =>:すべての
# ))
#1 RestClient.post(URL、{access_tokenは:access_tokenは、画像:画像}、{CONTENT_TYPE:@content_type})レスポンス|を行います|
# 本体= JSON.parse(response.body)
#の 戻り体[ "words_result"] [0] [ "単語"]
#1 端
RestClient.get(search_link、{:クッキー => COOKIE})ん|応答|
DOC =鋸山:: HTML(response.follow_redirection)
エンド
レスキュー例外 => eは
e.message置く
retry_timesを + = 1
download_error.error @ " のダウンロードエラー:#{search_link} "
再試行の場合 retry_times < MAX_RETRY_TIMES
エンド・
リターン・ドキュメントの
最後の
デフプロセスの
結果 = []
ページ =アレイ(18283..18583 )
pages.each_with_index行う | I、インデックス|
リンク = BASE_URL + i.to_sは
リンクを置きます
DOC =get_doc(リンク)
であればdoc.nil?
@ no_doc.errorリンク
次
エンド
開始
ctg_one = doc.css(' .ttopのH3 A ' )[0]の.text
ctg_two = doc.css(' IMG ')' SRC ' ]
救助
@のparse_error.errorリンクを
次
エンド
ハッシュ = Hash.newの
ハッシュ[ ' ctg_one ' ] = ctg_oneの
ハッシュ[ ' ctg_two ' ctg_two] =
結果 << ハッシュ
場合(インデックス+ 1)%10 == 0 || インデックス== pages.size - 1
File.open(" result.yaml "、' + '){| fと| YAML.dump(その結果、F)}
結果 = []
エンド
スリープランド( 4..10 )
エンド
エンド
プロセス