Heim > Artikel > Backend-Entwicklung > Erstellen Sie mit Python einen einfachen Proxy-Pool
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...
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.
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 .. .
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')
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)
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')
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!