検索
ホームページバックエンド開発Python チュートリアルPython クローラーを使用して Zhihu ログインをシミュレートする例を共有する

クロール処理中、一部のページはログイン前のクロールが禁止されています。このとき、ログインをシミュレートする必要があります。次の記事では主にPythonクローラーを使用してZhihuログインをシミュレートする方法についてのチュートリアルを紹介します。紹介記事はとても詳しく書かれていますので、必要な方は参考にしてください。以下を見てみましょう。

はじめに

クローラーを頻繁に作成する人なら誰でも、一部のページではログイン前のクロールが禁止されていることを知っています。たとえば、Zhihu のトピック ページにはアクセスするためにログインが必要であり、「ログイン」は Cookie と切り離せないものです。 HTTP のテクノロジー。

ログイン原理

Cookie の原理は非常に単純です。HTTP はステートレス プロトコルであるため、ステートレス HTTP プロトコル上で セッション 状態を維持するために、サーバーに現在の状態を知らせます。 Cookie テクノロジーは、サーバーがクライアントに割り当てる識別子に相当します。

  • ブラウザが初めてHTTPリクエストを開始するとき、Cookie情報は含まれません

  • サーバーはHTTPレスポンスとCookie情報で応答し、それを一緒にブラウザに返します

  • ブラウザ No. 2 番目のリクエストでは、サーバーから返された Cookie 情報が一緒にサーバーに送信され、サーバーが HTTP リクエストを受信し、リクエスト ヘッダーに Cookie フィールドがあることを検出します。以前にこのユーザーと取引しました。


  • 実践的な応用

Zhihuを使用したことのある人なら誰でも、ログインするにはユーザー名、パスワード、確認コードを入力するだけでよいことを知っています。もちろん、これは私たちが見ているものにすぎません。背後に隠された技術的な詳細は、ブラウザを使用して確認する必要があります。ここで Chrome を使用して、フォームに記入した後に何が起こったのかを確認します。

(すでにログインしている場合は、まずログアウトしてください) まず、Zhihu ログイン ページ www.zhihu.com/#signin に入り、Chrome 開発者ツールバーを開き (F12 キーを押します)、まず間違った確認コードを入力してみてくださいそしてブラウザがどのようにリクエストを送信するかを観察します。

ブラウザのリクエストからいくつかの重要な情報を見つけることができます

ログイン URL アドレスは https://www.zhihu.com/login/email です

  • ログインに必要なフォーム データは 4 です: ユーザー名 (電子メール)、パスワード (パスワード)、確認コード (キャプチャ)、_xsrf。

  • 認証コードを取得するためのURLアドレスは https://www.zhihu.com/captcha.gif?r=1490690391695&type=login


  • _xsrf とは何ですか? CSRF (クロスサイト リクエスト フォージェリ) 攻撃に精通している場合は、xsrf がクロスサイト リクエスト フォージェリを防ぐために使用される一連の擬似乱数であることを知っておく必要があります。通常、これを確認するには、ページ上で「xsrf」を検索すると、_xsrf が隠れた input タグ内にあり、そのときに必要なデータがわかりました。これを取得した後、Python を使用してブラウザのログインをシミュレートするコードの作成を開始できます。ログイン時に依存する 2 つのサードパーティ ライブラリは、リクエストと BeautifulSoup です。まず、HTTP Cookie の自動処理に使用できる

  • pip install beautifulsoup4==4.5.3
    pip install requests==2.13.0
http.cookiejar モジュールをインストールします。LWPCookieJar オブジェクトは、Cookie のカプセル化をサポートします。 Cookie をファイルに転送したり、ファイルにロードしたりすることができます。

セッション オブジェクトは、Cookie の永続化と接続プーリングの機能を提供します。

最初の実行では Cookie が存在しないため、Cookie 情報をセッション オブジェクトを通じて送信できます。起こる。

from http import cookiejar
session = requests.session()
session.cookies = cookiejar.LWPCookieJar(filename='cookies.txt')
try:
 session.cookies.load(ignore_discard=True)
except LoadError:
 print("load cookies failed")

xsrfを取得

xsrfが配置されているタグはすでに見つかりました。BeatifulSoupのfindメソッドを使用すると、非常に簡単に値を取得できます

def get_xsrf():
 response = session.get("https://www.zhihu.com", headers=headers)
 soup = BeautifulSoup(response.content, "html.parser")
 xsrf = soup.find('input', attrs={"name": "_xsrf"}).get("value")
 return xsrf
確認コードを取得します

検証コード /captcha.gif インターフェイスを通じて返されます。ここでは、手動で識別するために検証コード イメージをダウンロードして現在のディレクトリに保存します。もちろん、サードパーティのサポート ライブラリを使用して自動的に識別することもできます。パイテッサーとして。

りー

ログイン

一切参数准备就绪之后,就可以请求登录接口了。

def login(email, password):
 login_url = 'www.zhihu.com/login/email'
 data = {
  'email': email,
  'password': password,
  '_xsrf': get_xsrf(),
  "captcha": get_captcha(),
  'remember_me': 'true'}
 response = session.post(login_url, data=data, headers=headers)
 login_code = response.json()
 print(login_code['msg'])
 for i in session.cookies:
  print(i)
 session.cookies.save()

请求成功后,session 会自动把 服务端的返回的cookie 信息填充到 session.cookies 对象中,下次请求时,客户端就可以自动携带这些cookie去访问那些需要登录的页面了。

auto_login.py 示例代码

# encoding: utf-8
# !/usr/bin/env python
"""
作者:liuzhijun
"""
import time
from http import cookiejar

import requests
from bs4 import BeautifulSoup

headers = {
  "Host": "www.zhihu.com",
  "Referer": "www.zhihu.com/",
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87'
}

# 使用登录cookie信息
session = requests.session()
session.cookies = cookiejar.LWPCookieJar(filename='cookies.txt')
try:
  print(session.cookies)
  session.cookies.load(ignore_discard=True)

except:
  print("还没有cookie信息")


def get_xsrf():
  response = session.get("www.zhihu.com", headers=headers)
  soup = BeautifulSoup(response.content, "html.parser")
  xsrf = soup.find('input', attrs={"name": "_xsrf"}).get("value")
  return xsrf


def get_captcha():
  """
  把验证码图片保存到当前目录,手动识别验证码
  :return:
  """
  t = str(int(time.time() * 1000))
  captcha_url = 'www.zhihu.com/captcha.gif?r=' + t + "&type=login"
  r = session.get(captcha_url, headers=headers)
  with open('captcha.jpg', 'wb') as f:
    f.write(r.content)
  captcha = input("验证码:")
  return captcha


def login(email, password):
  login_url = 'www.zhihu.com/login/email'
  data = {
    'email': email,
    'password': password,
    '_xsrf': get_xsrf(),
    "captcha": get_captcha(),
    'remember_me': 'true'}
  response = session.post(login_url, data=data, headers=headers)
  login_code = response.json()
  print(login_code['msg'])
  for i in session.cookies:
    print(i)
  session.cookies.save()


if name == 'main':
  email = "xxxx"
  password = "xxxxx"
  login(email, password)

【相关推荐】

1. python爬虫入门(4)--详解HTML文本的解析库BeautifulSoup

2. python爬虫入门(3)--利用requests构建知乎API

3. python爬虫入门(2)--HTTP库requests

4.  python爬虫入门(1)--快速理解HTTP协议

5. python爬虫入门(5)--正则表达式实例教程

以上がPython クローラーを使用して Zhihu ログインをシミュレートする例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonリストをどのようにスライスしますか?Pythonリストをどのようにスライスしますか?May 02, 2025 am 12:14 AM

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

Numpyアレイで実行できる一般的な操作は何ですか?Numpyアレイで実行できる一般的な操作は何ですか?May 02, 2025 am 12:09 AM

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Pythonを使用したデータ分析では、配列はどのように使用されていますか?Pythonを使用したデータ分析では、配列はどのように使用されていますか?May 02, 2025 am 12:09 AM

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc

リストのメモリフットプリントは、Pythonの配列のメモリフットプリントとどのように比較されますか?リストのメモリフットプリントは、Pythonの配列のメモリフットプリントとどのように比較されますか?May 02, 2025 am 12:08 AM

listsandnumpyarraysinpythonhavedifferentmemoryfootprints:listsaremoreflexiblellessmemory-efficient、whileenumpyarraysaraysareoptimizedfornumericaldata.1)listsstorereferencesto objects、with whowedaround64byteson64-bitedatigu

実行可能なPythonスクリプトを展開するとき、環境固有の構成をどのように処理しますか?実行可能なPythonスクリプトを展開するとき、環境固有の構成をどのように処理しますか?May 02, 2025 am 12:07 AM

toensurepythonscriptsbehaveCorrectlyAcrossDevelosment、staging、and Production、usetheseStrategies:1)環境variablesforsimplestetings、2)configurationfilesforcomplexsetups、and3)dynamicloadingforadaptability.eachtododododododofersuniquebentandrequiresca

Pythonアレイをどのようにスライスしますか?Pythonアレイをどのようにスライスしますか?May 01, 2025 am 12:18 AM

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

どのような状況で、リストは配列よりもパフォーマンスが向上しますか?どのような状況で、リストは配列よりもパフォーマンスが向上しますか?May 01, 2025 am 12:06 AM

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

PythonアレイをPythonリストに変換するにはどうすればよいですか?PythonアレイをPythonリストに変換するにはどうすればよいですか?May 01, 2025 am 12:05 AM

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境