クローラーがアンチクロールメカニズムに遭遇した場合はどうすればよいですか?どのように解決したかを確認してください!

1はじめに

この記事のテキストと写真はインターネットからのものであり、学習とコミュニケーションのみを目的としており、商用目的ではありません。ご不明な点がございましたら、処理についてお問い合わせください。

PS:Pythonの学習教材が必要な場合は、以下のリンクをクリックして自分で入手できます

Pythonの無料の学習資料、コード、交換回答クリックして参加


「マイニング」のために「Douban」のユーザーと映画のデータをクロールすることを考え、ユーザーと映画の関係、およびそれぞれの関係を分析すると、データの量は少なくとも1万になります。

ただし、クロールプロセス中にアンチクロールメカニズムが発生したため、クローラーのアンチクロールの問題を解決する方法は次のとおりです。(例としてDoubanのWebサイトを取り上げます)

 

2.問題分析

初期コード


headers = {
            'Host':'movie.douban.com',
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
            'cookie':'bid=uVCOdCZRTrM; douban-fav-remind=1; __utmz=30149280.1603808051.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __gads=ID=7ca757265e2366c5-22ded2176ac40059:T=1603808052:RT=1603808052:S=ALNI_MYZsGZJ8XXb1oU4zxzpMzGdK61LFA; _pk_ses.100001.4cf6=*; __utma=30149280.1867171825.1603588354.1603808051.1612839506.3; __utmc=30149280; __utmb=223695111.0.10.1612839506; __utma=223695111.788421403.1612839506.1612839506.1612839506.1; __utmz=223695111.1612839506.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=223695111; ap_v=0,6.0; __utmt=1; dbcl2="165593539:LvLaPIrgug0"; ck=ZbYm; push_noty_num=0; push_doumail_num=0; __utmv=30149280.16559; __utmb=30149280.6.10.1612839506; _pk_id.100001.4cf6=e2e8bde436a03ad7.1612839506.1.1612842801.1612839506.',
            'accept': 'image/avif,image/webp,image/apng,image/*,*/*;q=0.8',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'zh-CN,zh;q=0.9',
            'upgrade-insecure-requests': '1',
            #'referer':'',
        } 
url = "https://movie.douban.com/subject/24733428/reviews?start=0"
r = requests.get(url, headers=headers)

上記は基本的なクローラーコードです。リクエストにヘッダー(Cookieを含む)を設定します。クロール防止メカニズムがない場合は、データを正常にクロールできます。

しかし、「Douban」のWebサイトには、クロール防止メカニズムがあります。

 

ほんの数ページをクロールした後、この検証が表示されます!

さらに重要なことは、検証後にクロールすることです。これは数秒後に再び表示されます。数秒間クロールを設定しても、解決されません。

3.解決策

スキーム予想

長年のクロール経験に基づいて、最初に頭に浮かぶのはIPプロキシを設定することです。これは、さまざまなユーザーがWebサイトをクロールするのと同じです。そこで、IPプロキシを使用して、アンチDoubanのクロールメカニズム。

多数のIPプロキシを取得する

単にIPプロキシを設定するだけなら、以前は自分のコンピュータでクロールするのと何ら変わりはありません。したがって、多数のIPプロキシが必要であり、同じIPによるクロールを避けるためにIPプロキシがランダムに選択されます。上昇メカニズムは這うことを禁じられています。

通常、IPプロキシは非常に高価です。売春婦として、ここでは無料のIPプロキシが使用されます(プロテストに利用可能)

白の売春プロセス


https://h.shenlongip.com/index/index.html

BaixianのIPプロキシプラットフォームは次のとおりです。ShenlongHttp、(これは広告ではありません。Baixianを使用して共有できると思います)

 

 

登録後、1000個のIPプロキシを無料で入手できます(詳細なプロセスは紹介しません。IPプロキシを使用してクライミング防止の問題を解決する方法に焦点を当てています〜)

 


したがって、抽出したIPプロキシをテキストファイルに入れることができます。

IPプロキシを設定する

IPプロキシを読む


iplist=[]
with open("ip代理.txt") as f:
    iplist = f.readlines()

すべてのIPをテキストファイルに保存したので、それを読み取ってIPリストに入れます。

IPプロキシをランダムに選択します


#获取ip代理
def getip():
    proxy= iplist[random.randint(0,len(iplist)-1)]
    proxy = proxy.replace("\n","")
    proxies={
        'http':'http://'+str(proxy),
        #'https':'https://'+str(proxy),
    }
    return proxies

ランダム機能により、IPプロキシはiplistプロキシコレクションからランダムに選択され、プロキシ形式にパッケージ化されます(ipプロキシ指定の形式を要求します)

注:ここでの私のIPプロキシはhttpであるため、httpsはここでコメント化されています。したがって、httpsがある場合、エラーが報告されます。

IPプロキシコード


headers = {
            'Host':'movie.douban.com',
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
            'cookie':'bid=uVCOdCZRTrM; douban-fav-remind=1; __utmz=30149280.1603808051.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __gads=ID=7ca757265e2366c5-22ded2176ac40059:T=1603808052:RT=1603808052:S=ALNI_MYZsGZJ8XXb1oU4zxzpMzGdK61LFA; _pk_ses.100001.4cf6=*; __utma=30149280.1867171825.1603588354.1603808051.1612839506.3; __utmc=30149280; __utmb=223695111.0.10.1612839506; __utma=223695111.788421403.1612839506.1612839506.1612839506.1; __utmz=223695111.1612839506.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=223695111; ap_v=0,6.0; __utmt=1; dbcl2="165593539:LvLaPIrgug0"; ck=ZbYm; push_noty_num=0; push_doumail_num=0; __utmv=30149280.16559; __utmb=30149280.6.10.1612839506; _pk_id.100001.4cf6=e2e8bde436a03ad7.1612839506.1.1612842801.1612839506.',
            'accept': 'image/avif,image/webp,image/apng,image/*,*/*;q=0.8',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'zh-CN,zh;q=0.9',
            'upgrade-insecure-requests': '1',
            #'referer':'',
        }
url = "https://movie.douban.com/subject/24733428/reviews?start=0"
r = requests.get(url, proxies=getip(), headers=headers, verify=False)

IPプロキシが追加された後、何百ものページがクロールされ、検証の問題は発生しませんでした。数万レベルのデータを簡単にクロールすることは問題ありません。

 

 

8677個のデータがクロールされ、検証が表示されず、プログラムはまだ実行中です~~~

時間間隔

それでも検証メカニズムが発生する場合は、時間間隔を追加できます。各ページをクロールするときは、プログラムを数秒間一時停止します(カスタム)


time.sleep(random.randint(3,5))

random.randint(3,5)は、ランダムに生成された35の間の数値であるため、プログラムは1回クロールした後、35秒間ランダムに一時停止します。これは、アンチクライミングのトリガーを防ぐための効果的なメカニズムでもあります。

4.まとめ

1.アンチクロール検証問題を解決するためのIPプロキシと時間間隔の使用について説明しました
2.ホワイト売春に利用できるIPプロキシ
3.クロールされたデータをさらに分析してマイニングします。この記事では、アンチクロールを解決する方法について説明します。クローラーのクロールの問題(結局のところ、みんなの時間は貴重で、読みが断片化されており、コンテンツが多すぎると消化が困難です)。

おすすめ

転載: blog.csdn.net/pythonxuexi123/article/details/114531220