pythonは反対によじ登って保護する方法をします。


ネットワーカーは自動的にウェブページを抽出するプログラムで、検索エンジンのためにウェブページをダウンロードするのは検索エンジンの重要な構成です。しかし、ネットの爬虫類が乱用されると、インターネット上に同質のものが多すぎて、オリジナルは保護されません。そこで、多くのサイトがアンチネットワーカーを始め、自分の内容を守るために工夫しています。
一:User-Agent+Referer検出
User−AgentはHTTPプロトコルのうちの一つのフィールドであり、HTTP要求を発行する端末のいくつかの情報を記述する役割を果たす。
クライアントが使用するオペレーティングシステムやバージョン、CPUタイプ、ブラウザおよびバージョン、ブラウザレンダリングエンジン、ブラウザ言語、ブラウザプラグインなどを識別できるようにする。
サーバーはこのフィールドを通じてウェブサイトにアクセスする人が何かを知ることができます。通常のブラウザではないユーザに対してシールドを行います。
ソリューション:
ブラウザを偽装するUser-Agentは、ブラウザごとにUser-Agentが異なり、すべてのユーザがブラウザを使用することができます。要求するたびに条件ブラウザのUser-Agentが解決されます。
Refererはheaderの一部です。ブラウザからウェブサーバに要求を送信すると、Refererを持ってきて、どのページからリンクしてきたのかをサーバーに教えます。例えば一部の画像サイトでは、画像を要求すると、あなたのReferer値が検出されます。Refererが合っていないと、正常な画像に戻りません。
ソリューション:
refererを検出する要求には、該当するreferer値を携帯する。
二:js混淆とレンダリング
JavaScript混淆とは、基本的に:
1.実際に呼び出されていない関数をいくつか削除します。
2.バラバラの変数宣言を統合します。
3.論理関数の簡略化。
4.変数名の簡略化。具体的には異なる圧縮工具の優劣を考えます。よくあるのはUglifyJS、JScamberなどのツールです。
jsレンダリングは実はHTMLページの修正です。例えば、いくつかのページ自体がデータに戻らない場合、データはjsを介してロードされた後、HTMLに追加されます。このような状況に遭遇した時、爬虫類はJavaScript操作を実行しないことを知るべきです。だから他の方法で処理する必要があります。
ソリューション:
1.ウェブサイトのjsソースを読むことで、重要なコードを見つけ、pythonで実現します。
2.ウェブサイトjsのソースコードを読んで、重要なコードを見つけて、PyV 8、execjsなどの倉庫で直接jsコードを実行します。
3.seleniumライブラリを通じて直接ブラウザ環境をシミュレーションする
三:IP制限頻度
WEBシステムはhttpプロトコルでWEBコンテナと接続されています。要求するたびに少なくとも一回のクライアントとサーバのtcp接続が発生します。
サーバーにとっては、一つのipアドレスが単位時間内に開始された要求をはっきりと確認することができます。
要求数が一定の値を超えると、異常なユーザ要求と判断される。
ソリューション:
1.自分でipプロキシプールを設計し、交代で、毎回異なるプロキシアドレスを要求する。
2.ADSLダイナミックダイヤルは独特の特徴があり、毎回番号を回すごとに新しいIPを取得します。つまり、IPは固定されていません。
四:認証コード
検証コード(CAPTCHA)は、「Copletely Automatic PublicTuring test to tell Computters and HumansArt」(全自動でコンピュータと人間を区別する図霊テスト)の略語であり、ユーザーがコンピュータかそれとも人間かを区別する公共全自動プログラムです。
防止できます:悪意がパスワードを解読して、切符を使って、フォーラムは注水して、効果的にあるハッカーがある特定の登録のユーザーに対して特定のプログラムの暴力で解読する方式で絶えない登録の試みを行うことを防止します。
この問題はコンピューターによって生成されて判定されますが、人間だけが答えられます。コンピュータがCAPTCHAの問題に答えられないので、問題を答えたユーザーは人間と考えられます。
ソリューション:
1.手動認証コード
2.pytesseract識別の簡単な検証コード
3.ドッキングコードプラットフォーム
4.機械学習
知識を広げる:
アンチ登山に基づく関連実例コード:

#! /usr/bin/env python3.4
#-*- coding:utf-8 -*-
#__author__ == "tyomcat"
 
 
import urllib.request
import random
import re
 
url='http://www.whatismyip.com.tw'
iplist=['121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843']
 
proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36')]
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
 
pattern = re.compile('<h1>(.*?)</h1>.*?<h2>(.*?)</h2>')
iterms=re.findall(pattern,html)
for item in iterms:
  print(item[0]+":"+item[1])

#! /usr/bin/env python
# -*- coding:utf-8 -*-
#__author__ == "tyomcat"
 
from selenium import webdriver
import time
import re
 
drive = webdriver.PhantomJS(executable_path='phantomjs-2.1.1-linux-x86_64/bin/phantomjs')
drive.get('https://mm.taobao.com/self/model_info.htm?user_id=189942305&is_coment=false')
 
time.sleep(5)
 
pattern = re.compile(r'<div.*?mm-p-domain-info">.*?class="mm-p-info-cell clearfix">.*?<li>.*?<label>(.*?)</label><span>(.*?)</span>',re.S)
html=drive.page_source.encode('utf-8','ignore')
items=re.findall(pattern,html)
for item in items:
  print item[0],'http:'+item[1]
drive.close()