リクエストモジュール
- クローラーのネットワーク要求に基づくモジュール
- pipインストール要求
- 役割:ブラウザをシミュレートしてリクエストを開始する
- コーディングプロセス:
- 1 . 指定url
- 2.リクエストを開始する
- 3.応答データを取得する(ページのソースデータをクロールする)
- 4.永続的なストレージ
簡単な例:
#指定爬取的url (以搜狗为例)
url = "https://www.sogou.com"
# 发起请求get方法返回值为响应对象
response = requests.get(url=url)
#获取响应数据,由于是对象,所以你需要展示内容有text,json
page_text = response.text
#持久化存储
with open("./zhou.html","w") as f:
f.write(page_text) #这里获取的是html代码,所以存储要是html后缀文件,要不然无法读取内容的
シンプルなWebページコレクターを実装する
- 対応するページデータをクロールするために指定されたさまざまなキーワードのSogouに基づく
- パラメータダイナミクス:
- リクエストされたURLがパラメーターを保持し、パラメーターを動的に保持したい場合、以下を行う必要があります。
- 1.運ばれた動的パラメーターをキーと値のペアの形式で辞書にカプセル化します。
- 2.辞書をgetメソッドのparamsパラメータに適用します
- 3.パラメータを含む元のURLに含まれるパラメータを削除する必要がある
- リクエストされたURLがパラメーターを保持し、パラメーターを動的に保持したい場合、以下を行う必要があります。
keyWord = input('enter a key word:')
#携带了请求参数的url.如果想要爬取不同的关键字对应的页面,我们徐娅将url携带的参数进行动态化
params ={"query":keyword }
#其实至于携带的参数不是咱们决定的,你得实验看看搜索的时候,搜狗网站的url的变化,由于尝试过了,搜索之后网址会带这/web?query = "zhou" 所以按照他的url发起请求
だからフォローアップの書き込み:
url = 'https://www.sogou.com/web'
#params参数(字典):保存请求时url携带的参数
response = requests.get(url=url,params=params)
#此时redponse可以查看到是乱码形式。你只需要修改编码即可持久化储存
#修改响应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding = 'utf-8' #如果还是乱码可以尝试gbk gbk2312 等编码
page_text = response.text
fileName = keyWord+'.html'
#别忘了存入的时候用utf-8编码
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,'爬取完毕!!!')
その後の発見
文字化けした文字を処理しました。ただし、ページには[異常アクセス]と表示されます。リクエストを失敗させる
異常なアクセス要求
- Webサイトの背景により、この要求がブラウザーによって開始された要求ではなく、クローラーによって開始された要求であることが検出されました。(ブラウザから開始されていないリクエストはすべて異常なリクエストです)
Webサイトの背景は、リクエストがブラウザーを介して開始されたかどうかをどのようにして知るのですか?
-
決定要求の要求ヘッダー内のユーザーエージェントによって決定されます
ユーザーエージェントとは
- 携帯通信会社のIDをリクエストする
- リクエストキャリアとは:
- ブラウザー
- ブラウザーのIDは統合および固定されており、IDはパケットキャプチャツールから取得できます。
- クローラー
- アイデンティティが違う
- ブラウザー
ピックアップ機能の1つ:UA
-
- UA検出:Webサイトのバックグラウンドは、要求に対応するユーザーエージェントを検出して、現在の要求が異常な要求であるかどうかを判断します。
- 抗登山戦略:
- UAカモフラージュ:一部のWebサイトに適用されていますが、今後、私たちが作成するクローラープログラムは、デフォルトでUA検出操作を提供します。
- 迷彩プロセス:
- パケットキャプチャツールからのブラウザリクエストに基づいてユーザーエージェントの値をキャプチャし、それを辞書に偽装して、リクエストメソッド(get、post)のヘッダーパラメータに辞書を適用します。
url = 'https://www.sogou.com/web'
params={"query":"zhou"}
#带上伪装请求载体。伪装成浏览器的身份
headers ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}
response = requests.get(url = url,params=params,headers=headers)
response.encoding="utf-8"
page_text = response.text
with open("homework(3)/zhou.html","w",encoding = "utf-8") as f:
f.write(page_text)