ホームページ  >  記事  >  バックエンド開発  >  Pythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説

Pythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説

高洛峰
高洛峰オリジナル
2017-03-31 10:00:491909ブラウズ

最近、試験のためにインターネットからソフトな試験問題をキャプチャする予定ですが、キャプチャ中にいくつかの問題が発生しました。次の記事では主に pythonは、ソフト試験問題のIP自動プロキシの関連情報をクロールします。記事で詳しく紹介されています。必要な友達は以下を参照してください。

前書き

最近、ソフトウェア プロフェッショナル レベルの試験があります。以下、ソフト試験と呼びます。試験の復習と準備をより良くするために、www.rkpass.cn からソフト試験の問題を入手する予定です

まず第一に、私がどのようにソフト試験問題をクロールしたかについてお話しましょう。以下に示すように、特定のモジュールのすべての質問を自動的にキャプチャできます。現在、30 個のテスト問題レコードすべてを取得できます。情報システム責任者の情報をキャプチャすることができ、その結果は下図の通りです。情報システム責任者の攻略を例にとると、目標が明確であり、能力を追求するためのパラメータが明確なので、試験用紙の情報を短時間で攻略することはしませんでした。

例外処理

。昨晩、長い間穴を埋めてきました。Pythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説

本題に戻りますが、記事内で新しい穴に遭遇したため、このブログを書いています。おそらくリクエストが多すぎると推測されます。 、そのため、IP はウェブサイトのアンチクローラーメカニズムによってブロックされました

Pythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説

生きている人間は窒息死することはできません。私たちの革命家の偉業は、社会主義者として、困難に屈してはいけないことを教えてくれます。山を越えて道路を作り、川を越えて橋を架ける IP 問題を解決するために、IP プロキシというアイデアが出てきました

Web クローラーによる情報のクローリングの過程で、クローリング頻度が Web サイトよりも高い場合。しきい値が設定されている場合、通常、Web サイトのクローラー対策メカニズムは IP に基づいてクローラーを識別します

Pythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説

そのため、クローラー開発者は通常、この問題を解決するために次の 2 つの方法を取る必要があります。 1. クロール速度を遅くし、ターゲット Web サイトへの負荷を軽減します。ただし、これにより、単位時間あたりのクロール量が減少します。2 番目の方法は、プロキシ IP を設定することで突破します。ただし、これには複数の安定したプロキシ IP が必要です

これ以上の説明は必要ありません。コードに移動してください:

# IP地址取自国内髙匿代理IP网站:http://www.xicidaili.com/nn/
# 仅仅爬取首页IP地址就足够一般使用

from bs4 import BeautifulSoup
import requests
import random

#获取当前页面上的ip
def get_ip_list(url, headers):
 web_data = requests.get(url, headers=headers)
 soup = BeautifulSoup(web_data.text)
 ips = soup.find_all('tr')
 ip_list = []
 for i in range(1, len(ips)):
 ip_info = ips[i]
 tds = ip_info.find_all('td')
 ip_list.append(tds[1].text + ':' + tds[2].text)
 return ip_list

#从抓取到的Ip中随机获取一个ip
def get_random_ip(ip_list):
 proxy_list = []
 for ip in ip_list:
 proxy_list.append('http://' + ip)
 proxy_ip = random.choice(proxy_list)
 proxies = {'http': proxy_ip}
 return proxies

#国内高匿代理IP网主地址
url = 'http://www.xicidaili.com/nn/'
#请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}
#计数器,根据计数器来循环抓取所有页面的ip
num = 0
#创建一个数组,将捕捉到的ip存放到数组
ip_array = []
while num < 1537:
 num += 1
 ip_list = get_ip_list(url+str(num), headers=headers)
 ip_array.append(ip_list)
for ip in ip_array:
 print(ip)
#创建随机数,随机取到一个ip
# proxies = get_random_ip(ip_list)
# print(proxies)

実行結果のスクリーンショット:

Pythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説

このように、クローラーがリクエストすると、リクエスト IP を自動 IP に設定すると、クローラー対策メカニズム

における固定 IP の単純なブロックを効果的に回避できます。

以上がPythonを使ってソフト試験問題をクロールするIP自動プロキシ方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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