1

J'essaie d'utiliser BeautifulSoup et des expressions régulières pour obtenir l'adresse IP du site Web (http://www.gatherproxy.com/).comment utiliser beautifulsoup et l'expression régulière pour obtenir l'adresse IP d'un site Web proxy

En inspectant le site, j'ai vu que l'adresse IP existante dans le format suivant:

<tr class="proxy 149-56-34-94-225F" prx="149.56.34.94:8799" time="2017-03-29T15:42:33Z" type="Transparent" country="United States" port="8799" tmres="797"><td>2m 54s ago</td><td>149.56.34.94</td><td><a> 

<tr class="proxy 138-68-180-44-1FB6" prx="138.68.180.44:8118" time="2017-03-29T15:42:32Z" type="Elite" country="United States" port="8118" tmres="47"><td>3m 25s ago</td><td>138.68.180.44</td><td><a> 

Je me sers le code suivant pour obtenir chaque balise

soup.find_all(name='tr',attrs={'class':re.compile(r"proxy [0-9a-zA-Z]+-[0-9a-zA-Z]+-[0-9a-zA-Z]+-[0-9a-zA-Z]+-[0-9a-zA-Z]+")}) 

Mais la sortie est rien.

Répondre

0

Si vous imprimez le contenu de votre requête depuis ce site Web, vous remarquerez que les lignes sont générées via Javascript.

Voici un exemple de cela:

gp.insertPrx({"PROXY_CITY":"","PROXY_COUNTRY":"France","PROXY_IP":"149.202.191.205","PROXY_LAST_UPDATE":"3 1","PROXY_PORT":"C38","PROXY_REFS":null,"PROXY_STATE":"","PROXY_STATUS":"OK","PROXY_TIME":"524","PROXY_TYPE":"Transparent","PROXY_UID":null,"PROXY_UPTIMELD":"4152/393"});

Pour cette étape, vous n'avez pas besoin BeautifulSoup, vous pouvez regex le contenu directement.

Comme ceci:

import re 
import requests 
import json 

result = requests.get("http://www.gatherproxy.com").content 
matches = re.findall(r'gp\.insertPrx\(([^(]*)\);', str(result)) 

for match in matches: 
    _object = json.loads(match) 
    print (_object["PROXY_IP"]) 

qui sort:

104.156.226.80

52.32.220.134

138.68.184.128

...

+0

Merci Zroq! Votre code fonctionne parfaitement. Avez-vous une idée de pourquoi mon code précédent ne fonctionne pas? – shawn123

+0

Le 'tr' que vous essayiez de trouver est généré via javascript, que BeautifulSoup ne peut pas analyser. Vous pouvez utiliser du sélénium pour ce genre de choses. – Zroq