如何使用beautifulsoup和正则表达式从代理网站获取IP地址

时间:2017-03-29 19:50:54

标签: regex python-3.x beautifulsoup web-crawler

我正在尝试使用Beautifulsoup和正则表达式从网站(http://www.gatherproxy.com/)获取IP地址。

通过检查网站,我看到了以下格式存在的IP地址:

<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>

所以我使用以下代码来获取每个标记

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]+")})

但输出无效。

1 个答案:

答案 0 :(得分:0)

如果您从该网站打印请求的内容,您会注意到这些行是通过Javascript生成的。

以下是一个例子:

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"});

对于此步骤,您不需要BeautifulSoup,您可以直接对内容进行正则表达式。

像这样:

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"])

哪个输出:

  

104.156.226.80

     

52.32.220.134

     

138.68.184.128

     

...