我正在尝试使用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]+")})
但输出无效。
答案 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
...