Erstellen Sie mit Python einen einfachen Proxy-Pool

little bottle
Freigeben: 2019-04-08 10:02:51
nach vorne
4406 Leute haben es durchsucht



Tatsächlich habe ich jedes Mal, wenn ich etwas crawle, Angst, dass meine IP blockiert wird, also muss ich es tun Stellen Sie jedes Mal die Zeitverzögerung ein. Es wird etwas länger dauern ... Dieses Mal werde ich Python verwenden, um einen einfachen Proxy-Pool zu erstellen. Rufen Sie die Proxy-IP ab und überprüfen Sie deren Gültigkeit. Das Ergebnis scheint jedoch nicht sehr ideal zu sein. Warum kann der Höhen-Proxy von West Spurs verwendet werden? ? ? Bedeutet das nicht, dass freie Agenten nicht einfach zu verwenden sind? Es ist wirklich ein schwarzes Fragezeichengesicht...

Erstellen Sie mit Python einen einfachen Proxy-Pool


Agentenakquise Nr. 1

01 Webseitenanalyse

Erhalten Sie Webseiteninformationen, indem Sie auf den inländischen High-Definition-Agenten von Xisha klicken.

Erhalten Sie IP-Adresse, Port, anonym oder nicht, Typ, Geschwindigkeit.

Erstellen Sie mit Python einen einfachen Proxy-Pool

02 Proxy-Informationen abrufen

Denken Sie daran, die zufällige Auswahl von Headern und Ruhezeit festzulegen, da ich sie nicht festgelegt habe, und dann wurde ich blockiert .. .

Erstellen Sie mit Python einen einfachen Proxy-Pool

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')
Nach dem Login kopieren

Erstellen Sie mit Python einen einfachen Proxy-Pool

Erhalten Sie zufällig den Code des Benutzeragenten. Die folgende Funktion wurde oben nicht hinzugefügt (das Ergebnis soll sein blockiert, aber beim zweiten funktioniert es wieder)

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)
Nach dem Login kopieren

NO.2 Proxy-Verifizierung

Durch die Verifizierung habe ich herausgefunden, dass die meisten davon verwendet werden können, ich nicht wissen, ob sie wahr sind oder nicht.

Die Website, auf der der Bestätigungscode zuvor erkannt wurde, wird als URL verwendet, z. B. Yunge Novel Network.

Nur ​​2 von 200 sind ungültig, unwissenschaftlich~

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')
Nach dem Login kopieren

NR.3 Zusammenfassung

IP-Protokoll: Internetprotokoll, seine Funktion besteht darin, zu kombinieren Verschiedene Das Datenpaket wird an die andere Partei übertragen (zwei wichtige Bedingungen, IP-Adresse und MAC-Adresse).

IP-Adresse: Gibt die dem Knoten zugewiesene Adresse an.

Port: Ports werden durch Portnummern gekennzeichnet, die nur Ganzzahlen im Bereich von 0 bis 65535 sind. Für eine IP-Adresse gibt es 65536 Ports. „IP-Adresse + Portnummer“ unterscheidet verschiedene Dienste (Web, FTP, SMTP).

HTTP: Hypertext Transfer Protocol, führt eine Reihe betrieblicher Prozesse vom Client zum Server durch.

HTTPS: HTTP mit hinzugefügten Verschlüsselungs- und Authentifizierungsmechanismen.

Ehrlich gesagt wusste ich vorher nichts über IP-Adressen, Ports, HTTP und HTTPS.

Ich habe kürzlich HTTP-Diagramme gelesen und verstehe sie einigermaßen, aber nur ein bisschen, und es liegt noch ein langer Weg vor uns.

Rom wurde jedoch nicht an einem Tag erbaut, und Fortschritt ist eine gute Sache!

[Empfohlene Kurse: Python-Kolumnenkurs]





Das obige ist der detaillierte Inhalt vonErstellen Sie mit Python einen einfachen Proxy-Pool. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jianshu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!