【クローラシリーズ】Seleniumモジュールを使って求人サイトの求人情報を収集する(1)

前回のデモン​​ストレーションでは、Zhaopin 採用サイトの PC 側 Web ページの求人情報を Request モジュールを使用して収集したため、比較的隠れたクローリング制限に遭遇しました(時点では原因は不明でした)。このモジュールを使用する方法は当分機能しないようです。今度は、Selenium モジュールを使用して、Web サイトのアンチクロール制限の具体的な理由を見つけようと考えています

1. 環境整備

  • Google Chrome および chromedriver.exe ドライバー プラグイン。
  • Python プログラミングをサポートするエディター (PyCharm など)。
  • pip セレン、BeautifulSoup、csv、その他のモジュールをダウンロードします。

: Google Chrome のドライバー プラグインのインストールと検証については、 「クローラ入門」で紹介したので、ここでは繰り返しません。

2. Selenium モジュールを使用する

ターゲット Web ページを選択した後、最も重要なことは、Web ページの構造を分析してターゲット要素を特定することです。前回の記事ですでに具体的な分析を行っているため、ここでの説明は省略しますが、Selenium モジュールを直接使用してデータ収集を実現し、以前に存在したアンチクライミングの原因を見つけてみます。

主なメソッドのアイデア:

  • Selenium モジュールの webdriver ドライバー ライブラリを使用して、ブラウザーを開くことをシミュレートします。
  • Get リクエストを送信して、杭州で Python のポジションを募集している Zhaopin の最初のページのアドレスにアクセスします (当面は複数のウィンドウを使用しないでください)。
  • 10 秒ほど待った後、最初のページの Web ページのソース コードを取得し、それを txt ファイルに書き込んで保存します。
  • 次のステップは、Web ページ要素を解析して見つけます。この部分の手順と方法は前と同じです。対象データを抽出した後、それを CSV ファイルに書き込んで保存します。最後に、ブラウザを終了して閉じます。

最初のページのテストクロールのデモンストレーションは次のとおりです。

def selenium_zl(url, savePath, results, fileType):
    browser = webdriver.Chrome()
    browser.get(url) # https://sou.zhaopin.com/?jl=653&kw=Python
    browser.implicitly_wait(10)
    html = browser.page_source
    html2txt(html, "1", savePath)
    parser_html_by_bs(html, "1", results, fileType, savePath)
    print('爬取页面并解析数据完毕,棒棒哒.....................................')
    browser.quit()

txt ファイルの内容分析:

Web ページのソース コードを取得すると、保存された HTML Web ページが最初のページのデータを収集したかどうかの検証を開始できます。何気なくキーワード「Hema Holdings」を検索しましたが、txt ファイルには存在しません、 次のように:

自分の人生を疑い始めていますか?選択したモジュールとはあまり関係がないようです。

山は重く、川は戻り、柳は暗く、花は明るい。

考えを改め、Webページの解析とブラウザ終了のコードを一旦コメントアウトし、ブラウザのクリックコードを追加したところ、どうやら見た目が違うようで、コードは以下の通りです。

この時点では、シミュレートされたブラウザーは終了せず、次のように最初のページのコンテンツが表示されます。

ここで、その理由がわかったような気がします。以下のように、Session access によって制限されていることがわかります。シミュレートされたブラウザのページを手前にめくると、次のようになります。

これは本当にイライラします。ここで反省させてください。前回の分析中に、ブラウザで手動ログインをすでに行っています。なぜクローラー コードを使用するときにログインする必要があるのでしょうか? 当然のこととして受け止めることはできないようですが、何が起こっているかを理解したので、的を絞った方法で回避することができます。

スティックをマスターしながらもヤードを目指す:

セッション アクセスによって制限されている場合は、リクエストを開始する前にセッション セッションを作成してログインしてください。しかし、物事はそれほど単純ではなく、Zhaopin の PC 側 Web ページでは、携帯電話番号 + SMS 認証コードでのみログインできます。私はすぐに言葉を失い、ハイハイの難易度が大幅に上がりました。「おい、とても疲れた!」

調査とテストを行った結果、考えられる解決策は大まかに 2 つあります。

  • 1 つは、携帯電話上の検証コードをサードパーティのプラットフォームに転送し、プラットフォームのサーバーにアクセスしてコードを要求するクローラ コードを自動化する方法を見つけることです。
  • 2 つ目は、最初に Web サイトに手動でログインし、次に自動クローラ コード内の Cookie を使用して、ログインした Cookie を取得してログインをシミュレートする方法です。

最初のオプションはより難しく、多くの知識を蓄えておく必要があります。たとえば、携帯電話のテキスト メッセージを監視する送受信メカニズムと Flask フレームワークの使用法を理解するか、単にコーディング プラットフォームを使用するか、ディープ ラーニング アルゴリズムなどのさまざまな方法を自分で実装する必要があります。安全性と実装の複雑さを考慮すると、ははは、すぐに辞めるよう説得されましたが、現時点では私自身の知識体系と予備力が十分ではないので、後で徹底的に調査します。

2 番目のオプションはそれほど難しくありませんが、HTTP 通信についてある程度の知識が必要です。この方法は簡単で実行可能なので、使用することをお勧めします。そのため、次の記事では SMS 認証コードを回避してログインする方法に焦点を当てたいと思います。

3. まとめ

長年悩んでいた問題の原因がようやく判明しました、どうやらサイトのアンチピックアップ制限が原因だったことが判明しました!ここに記録しておきます。

次に、この問題の解決策を引き続き検討し、前の目標を達成します。次の部分で要約と整理を行います。

おすすめ

転載: blog.csdn.net/qq_29119581/article/details/127939407