pythonクローラーは数分でリクエストを処理します。

現在、Pythonクローラーに一般的に使用されているリクエストライブラリは2つあります。1つはurllibで、もう1つはリクエストです。urllibについては、以前に対応するブログを作成しましたが、urllibはより「オリジナル」です。使用するのは面倒で、もちろんリクエストよりも難しいです。ブログに少しうんざりしているので、urllibに関するブログを更新しません。結局のところ、リクエストは強力でユーザーフレンドリーです。だからここにリクエストの使い方について書くブログがあります。ブログで十分だと推定されています。
これには、要求方法、文字列のデコード、要求後の受信パラメーターの送信、クローラーのカモフラージュ、IPプロキシ設定、Cookie情報処理などが含まれます。

リクエスト方法

リクエストがリクエストを配信する方法について説明します。1つは取得で、もう1つは投稿です。次のコード:
例としてBaiduWebサイトの使用法を示します。

import requests
url='https://www.baidu.com/'
date=requests.get(url)
#data=requests.post(url)

その中で、投稿リクエストでは、フォームを提供したり、ユーザー名やパスワードなどを渡してサーバーにリクエストを送信したりできます。
次のCookie処理は、QQスペースで示されます。

文字列をデコードする

Webサイトがリクエスト
1.1のテキストを返す場合は2つの方法があります

import requests
url='https://www.baidu.com/'
date=requests.get(url)
print(date.text)

1.2コンテンツ

import requests
url='https://www.baidu.com/'
date=requests.get(url)
print(date.content)

ここで、テキストはデコードされたユニコード文字列を返しますが、コンテンツはバイトである
ここに写真の説明を挿入
ため、utf-8やgbkなどの必要に応じてデコードできることに注意してください。
ここに写真の説明を挿入

着信パラメータ(偽装(ユーザーエージェント)、パラメータの受け渡し)

リクエストはurllibよりもはるかにシンプルで便利です。最初に画像を確認
できます。パラメータとして直接渡すことができます。
ここに写真の説明を挿入
投稿と取得は同じです。
したがって、ヘッダーなどの値を直接渡すことができます

import requests
url='https://www.baidu.com/'
headers={
    
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

date_s=requests.get(url)
date_l=requests.get(url,headers=headers)

print(len(date_s.content.decode('utf-8')))
print(len(date_l.content.

この場合、ヘッダーのないものと追加されたものを区別しましたが、追加されていないものの方が返されるデータが少ないことがわかります。実際、サーバーがクローラースクリプトであると判断し、冗談を言って誤解を招いたためです。私達。
ターゲットサーバーが、ブラウザインターフェイスに表示されるものとは異なる、不完全なフィードバックや誤ったデータを提供し続けることがあります。したがって、この時点で、リクエストヘッダーを追加するなどの偽装を行う必要があります。もちろん、Lagouネットをクロールするときなど、時にはそれだけでは不十分です。
そのため、リクエストヘッダーを作成する場合は、より複雑で包括的になる可能性があります。
ここに写真の説明を挿入

IPプロキシ

とても便利です。
誰もがこれを多かれ少なかれ知っている必要があります。すべてのコンピューターには、ネットワークにアクセスするためのIPアドレスがあります。ただし、クローラーがWebサイトを同時に複数回クロールし、同じIPを使用している場合、サーバーがクローラーであるかどうかを疑うことがあり、この時点でログインが制限されることがあります。現時点では、IPプロキシを使用できます。つまり、他の人のIPを介してWebサイトにアクセスできます。これにより、疑惑を減らし、セキュリティを確保できます。
1 GetIP
これは主要なIPWebサイトから購入することも、無料で購入することもできますが、安定していません。自分でIPプロキシプールを構築することを検討できます。もちろん、これは大規模な取得訪問のみを対象としています。それ以外の場合は、通常は十分です。
ここに写真の説明を挿入
2.プロキシを使用する
これは、不安定な可能性のある無料のプロキシです。

ここに写真の説明を挿入
これはあまり安定していませんが、IPプロキシを使用する場合は、最初にプロキシを設定してから、リクエストにプロキシパラメータを入力するだけです。

import requests
url='http://httpbin.org/ip'
headers={
    
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
proxy={
    
    'http':'2121.232.144.155:9000'}
date=requests.get(url,headers=headers,proxies=proxy)
print(date.content.decode('utf-8'))

ここに写真の説明を挿入
さて、今回は成功しました。ここで私が訪れたテストサイトに注意してください:http://httpbin.org/ip

クッキー情報処理。

1クッキーを取得

import requests
url='https://www.baidu.com/'
headers={
    
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

date=requests.get(url,headers=headers)
#print(date.content.decode('utf-8'))
print(date.cookies.get_dict())

  1. Cookieの使用(シミュレーション演習)これ
    は、独自のQQスペースにログインする例です。
    ここに写真の説明を挿入
    コードは次のとおりです。


import requests
url_get_cookie='https://qzone.qq.com/'
url_qq_space='https://user.qzone.qq.com/3139541502'
date={
    
    'username':'3139541502(写自己的qq)','password':'(写自己的QQ密码)'}
headers={
    
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
session =requests.session()#创建session对象
session.post(url_get_cookie,data=date,headers=headers)#获取cookie
resq=session.get(url_qq_space)#访问空间
print(resq.text)
#print(session.cookies)


QQスペースにログインするには、ログイン情報を入力してからスペースを入力する必要があります。スペースを入力する前提は、アカウントのパスワードを入力することです。このとき、自分のスペースにログインしていることを証明するCookie情報が生成されます。したがって、この情報を取得する必要があります(もちろん、Cookie情報は時間に依存します)。
次に、アクセス(対応するアクセス)のためにCookieを保存する必要があり
、リクエスト内のセッションがCookieを取得して保存できます。次に、次の訪問に進みます。
プロセスは次のとおりです
ここに写真の説明を挿入
ここに写真の説明を挿入

信頼できないSSL証明書の処理

クロール時に、信頼できない証明書のエラーが報告されることがあります。実際、pythonには以前はこの設定がありませんでしたが、通常は発生しませんが、一部のxxWebサイトをクロールすると次のようなエラーが発生する場合があります。
ここに写真の説明を挿入

そしてこのように

URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:606)>

図に示すように、解決策も簡単
ここに写真の説明を挿入
です。urllibの処理方法もここにあります。
ここに示すコードに注意してください。

from urllib import request
import re
import os
import ssl
context = ssl._create_unverified_context()
省略若干代码
 b = request.urlopen(url, timeout=tolerate,context = context).read().decode('gb2312', 'ignore')
省略若干代码

または、SSLをグローバルに無視するように設定できます

from urllib import request
import re
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
省略若干代码

おすすめ

転載: blog.csdn.net/FUTEROX/article/details/107428496