Maison  >  Article  >  développement back-end  >  Créez un pool de proxy simple à l'aide de Python

Créez un pool de proxy simple à l'aide de Python

little bottle
little bottleavant
2019-04-08 09:30:194467parcourir



En fait, chaque fois que je crawle quelque chose, j'ai peur que mon IP soit bloquée, je dois donc définissez le délai à chaque fois. Cela va être un peu plus long... Cette fois, je vais utiliser Python pour créer un simple pool de proxy. Obtenez l'adresse IP du proxy et vérifiez sa validité. Cependant, le résultat ne semble pas très idéal. Pourquoi peut-on utiliser le proxy à haute altitude de West Spurs ? ? ? Cela ne veut-il pas dire que les agents libres ne sont pas faciles à utiliser ? C'est vraiment un visage de point d'interrogation noir...

Créez un pool de proxy simple à laide de Python


Acquisition d'agent NO.1

01 Analyse de page Web

Obtenez des informations sur la page Web en cliquant sur l'agent haute définition national de Xisha.

Obtenez l'adresse IP, le port, anonyme ou non, le type, la vitesse.

Créez un pool de proxy simple à laide de Python

02 Obtenir des informations sur le proxy

N'oubliez pas de définir la sélection aléatoire des en-têtes et du temps de veille, car je ne l'ai pas défini, puis j'ai été bloqué .. .

Créez un pool de proxy simple à laide de Python

import time
import requests
from bs4 import BeautifulSoup
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
for i in range(1, 36):
    time.sleep(2)
    print('第' + str(i) + '页')
    url = 'http://www.xicidaili.com/nn/' + str(i)
    response = requests.get(url=url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    all_trs = soup.find_all('tr')
    for tr in all_trs[1:]:
        all_tds = tr.find_all('td')
        ip = all_tds[1].get_text()
        port = all_tds[2].get_text()
        anonymous = all_tds[4].get_text()
        type = all_tds[5].get_text()
        for j in all_tds[6].find_all("div", attrs={"class": "bar"}):
            speed = j.get('title')
        with open('ip.csv', 'a+', encoding='utf-8-sig') as f:
            f.write(ip + ',' + port + ',' + anonymous + ',' + type + ',' + speed + '\n')

Créez un pool de proxy simple à laide de Python

Obtenez aléatoirement le code de l'agent utilisateur La fonction suivante n'est pas ajoutée ci-dessus (le résultat est. qu'il est bloqué, mais il a de nouveau fonctionné le lendemain)

def get_user_agent():
    '''
    随机获取一个用户代理
    '''
    user_agents=[
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
        "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
        "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
        "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
        "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
        "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
        "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
        "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
        "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
        "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
    ]
    # random.choice返回列表的随机项
    user_agent = random.choice(user_agents)
    return user_agent

# random.randint产生随机整数
time.sleep(2 + float(random.randint(1, 100)) / 20)

NO.2 Vérification du proxy

Après vérification, j'ai constaté que la plupart d'entre eux peuvent être utilisés, je ne sais pas s'ils sont vrais ou faux.

Le site Web sur lequel le code de vérification a été précédemment reconnu est utilisé comme URL, tel que Yunge Novel Network.

Seulement 2 sur 200 sont invalides, non scientifiques~

import pandas as pd
import numpy as np
import requests
import time

df = pd.read_csv('ip.csv', header=None, names=["ip", "port", "anonymous", "proxy_type", "speed"])

proxy_types = ["{}".format(i) for i in np.array(df['proxy_type'])]
ips = ["{}".format(i) for i in np.array(df['ip'])]
ports = ["{}".format(i) for i in np.array(df['port'])]

proxy_url = ['{0}://{1}:{2}'.format(proxy_types[i], ips[i], ports[i]) for i in range(len(ips))]

proxy_type = ['{}'.format(i) for i in proxy_types]
for i in range(200):
    time.sleep(1)
    proxies = {
        proxy_type[i]: proxy_url[i]
    }
    try:
        response = requests.get('http://www.quanben9.com/', proxies=proxies)
    except Exception as e:
        print('invalid ip and port')
    else:
        code = response.status_code
        if code == 200:
            print('effective ip')
            with open('effective_ip.csv', 'a+', encoding='utf-8-sig') as f:
                f.write(proxy_type[i] + ',' + proxy_url[i] + '\n')
        else:
            print('invalid ip and port')

Résumé NO.3

Protocole IP : Protocole Internet, sa fonction est à Différents paquets de données sont transmis les uns aux autres (deux conditions importantes, l'adresse IP et l'adresse MAC).

Adresse IP : Indique l'adresse attribuée au nœud.

Port : les ports sont marqués par des numéros de port. Les numéros de port ne sont que des nombres entiers, allant de 0 à 65 535. Il existe 65536 ports pour une adresse IP. « Adresse IP + numéro de port » distingue différents services (Web, FTP, SMTP).

HTTP : Hypertext Transfer Protocol, complète une série de processus opérationnels du client au serveur.

HTTPS : HTTP avec mécanismes de cryptage et d'authentification ajoutés.

Pour être honnête, je ne connaissais rien aux adresses IP, aux ports, au HTTP et au HTTPS auparavant.

J'ai lu récemment des diagrammes HTTP et je les comprends un peu, mais seulement un peu, et il reste encore un long chemin à parcourir.

Pourtant, Rome ne s’est pas construite en un jour, et le progrès est une bonne chose !

[Cours recommandés : Cours sur colonne Python]





Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer