Lorsque vous utilisez des reptiles Python, se heurtent souvent à un site Web qui mécanisme anti-escalade. Nous pouvons ramper à travers les en-têtes de camouflage, mais le site peut encore obtenir votre ip, afin d'interdire votre adresse IP pour empêcher que des informations ramper.
Dans la méthode de demande, nous pouvons dissimuler notre IP grâce à des paramètres proxies, certains site proxy ip gratuitement sur le site Web, vous pouvez explorer ces ip, piscine d'agent ip établi par le post-test.
Il a recommandé une méthode commune de la tête de camouflage
de UserAgent d'importation fake_useragent
ua = UserAgent ()
têtes = { 'User-Agent': ua.random}
Ensuite arriver au point
ip rampants (IPPool.py)
les demandes d'importation
de etree d'importation lxml
de UserAgent d'importation fake_useragent
# Disguise
ua = UserAgent ()
têtes = { 'User-Agent': ua.random}
def get_ip ():
ip_list = []
# Chemin
url = 'https://www.xicidaili.com/nt/' #ip vieillit, seule la première page crawling
# Demande
réponse = requests.get (url = url, les en-têtes des en-têtes =)
# Set de codage
response.encoding = response.apparent_encoding
réponse = response.text
réponse = etree.HTML (réponse)
tr_list = response.xpath ( '// tr [@ class = "impair"]')
pour i dans tr_list:
#ip
ip = i.xpath ( './ td [2] / texte ()') [0]
# Numéro de port
port = i.xpath ( './ td [3] / texte ()') [0]
# Protocole
accord = i.xpath ( './ td [6] / texte ()') [0]
accord = agreement.lower ()
# Montage du chemin complet
ip = accord + ': //' + ip + ':' + port
ip_list.append (ip)
retour ip_list
si __name__ == '__main__':
ip_list = get_ip ()
imprimer (ip_list)
ip test
Méthode d'essai un (du Pool import multiprocessing.dummy)
les demandes d'importation
de Pool d'importation multiprocessing.dummy
# Crawling pour obtenir une liste d'IP
de get_ip d'importation ippool
test_list = get_ip ()
# Définir une liste globale, utilisée pour stocker IP valide
ip_list = []
site d'essai #ip
url = 'http://icanhazip.com'
têtes = {
'User-Agent': Mozilla / 5.0 (Windows NT 10.0, Win64, x64; rv: 70,0) Gecko / 20100101 Firefox / 70,0 '
}
def ip_test (ip):
essayer:
si ip.split ( ":") [0] == 'http':
procurations = {
'Http': ip
}
autre:
procurations = {
'Https': ip
}
réponse = requests.get (url = url, les en-têtes des en-têtes =, = proxies procurations, timeout = 3)
ip_list.append (ip)
print (ip + "Disponible")
sauf:
print (ip + "indisponible")
si __name__ == '__main__':
piscine = piscine (4)
pool.map (ip_test, test_list)
imprimer (ip_list)
print ( "% s ip total Ramper, ip disponible:% s, ip est indisponible:% s" % (len (test_list), len (ip_list), len (test_list) -NBCAR (ip_list)))
Les résultats des tests:
Méthode d'essai Deux (Filetage de file d'attente multi-thread)
filetage d'importation
les demandes d'importation
file d'attente d'importation
de UserAgent d'importation fake_useragent
# Crawling pour obtenir une liste d'IP
de get_ip d'importation ippool
test_list = get_ip ()
# Définir une liste globale, utilisée pour stocker IP valide
ip_pool = []
# Camouflage tête aléatoire
ua = UserAgent ()
têtes = { 'User-Agent': ua.random}
url = 'https://www.csdn.net/'
# Url = 'http://icanhazip.com/'
def test_ip (queue_list):
while True:
si queue_list.empty ():
Pause
autre:
ip = queue_list.get ()
si ip.split ( ":") [0] == 'http':
procurations = {
'Http': ip
}
autre:
procurations = {
'Https': ip
}
essayer:
réponse = requests.get (url = url, les en-têtes des en-têtes =, = proxies procurations, timeout = 3)
si response.status_code == 200:
print ( "% de] [% s test, les résultats des tests sont disponibles []" % (threading.current_thread () nom., mandataires))
ip_pool.append (ip)
sauf:
print ( "% de] [% s test, les résultats des tests ne sont pas disponibles []" % (threading.current_thread () nom., mandataires))
si __name__ == '__main__':
queue_list = Queue.Queue () # Créer une file d'attente
# Ip de ramper dans la file d'attente
pour i dans test_list:
queue_list.put (i)
# Créer un fil
out_thread = [threading.Thread (target = test_ip, args = (queue_list,), name = "进程% s" % s objet) pour le point dans la plage (5)]
pour le fil dans out_thread:
Thread.Start ()
pour le fil dans out_thread:
Thread.join ()
print ( 'Test Complete')
imprimer (ip_pool)
print ( "% s ip total Ramper, ip disponible:% s, ip est indisponible:% s" % (len (test_list), len (ip_pool), len (test_list) -NBCAR (ip_pool)))
résultats:
URL de test ne ont pas besoin si complexe, www.baidu.com une classe peut avoir un blogueur recommande un site Web de test: http: //icanhazip.com/
Rencontrés lors du test d' une fosse, pas trop d' attention au protocole est http ou https, unifié avec le http, puis trouvé chaque ip peut être utilisé, bien sûr, cela est impossible, modifiée après un test réussi d'environ vingt-ip cinq ou plus. Zhengzhou, combien d' argent l' avortement http://www.kdwtrl.com/
ip https://www.kuaidaili.com/free/intr/ crawling cette URL a également écrit (ip pas de traitement), mais un peu ip cette URL, donc il n'y a pas de test
IPPool2.py
les demandes d'importation
de etree d'importation lxml
de UserAgent d'importation fake_useragent
# Disguise
ua = UserAgent ()
têtes = { 'User-Agent': ua.random}
def get_ip ():
ip_list = []
# Chemin
url = 'https://www.kuaidaili.com/free/intr/'
# Demande
réponse = requests.get (url = url, les en-têtes des en-têtes =)
# Set de codage
response.encoding = response.apparent_encoding
réponse = response.text
réponse = etree.HTML (réponse)
tr_list = response.xpath ( '// * [@ id = "liste"] / table / tbody / tr')
pour i dans tr_list:
ip = i.xpath ( './ td [1] / texte ()') [0]
ip_list.append (ip)
retour ip_list
si __name__ == '__main__':
ip_list = get_ip ()
# Print (ip_list)