ルビー爬虫類テンプレート

必要' 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 
  エンド
エンド

プロセス

 

おすすめ

転載: www.cnblogs.com/znsongshu/p/11371947.html