1

首先,我要提前感谢大家,我意识到这可能是一个相当基本的问题,但是在几个小时没有结果之后,我决定伸出手寻求帮助。

我正在编写一个小脚本,该脚本最终将成为一个更大的多部分程序的一部分(希望大声笑)。基本上,它会查询 hidemyass.com 以获取代理列表(基于用户输入),然后将所述列表保存到临时文件中,以便在下一步中进行 ping 和验证。看起来很简单吧?

现在我的问题...

当我提出请求并查看 html 响应源时,代理 ip 地址已被拆分。

例如。

    <br>
    .QJZ-{display:none}<br>
    .dA6C-{display:inline}<br>
    .h0UB-{display:none}<br>
    .HOns-{display:inline}<br>
    <br>        
    </style><div style="display:none">1</div><span></span><span style="display:none">99</span><span class="QJZ-">99</span><div style="display:none">99</div>201<span style="display: inline">.</span><span class="QJZ-">9</span><div style="display:none">9</div><div style="display:none">10</div><span style="display:none">80</span><span class="QJZ-">80</span><span style="display:none">140</span><span class="QJZ-">140</span><span style="display:none">149</span><span class="h0UB">149</span><div style="display:none">149</div><span style="display:none">161</span><span class="h0UB">161</span><span></span><span style="display:none">190</span>210<div style="display:none">217</div><span class="h0UB">234</span><span class="243">.</span><span class="h0UB">6

我的问题是,我到底怎么才能让我的代码将其读取为 IP 地址?(它不是完整的 html,我切断了我的问题,因为它已经很大了)

再次感谢
L8nit3tr0ubl3

编辑-忘了提到我正在使用python,并且几乎没有javascript/html经验(我假设拆分是用java完成的)

4

2 回答 2

1
#!/usr/bin/python
#-*- encoding: Utf-8 -*-
from requests import get
from re import sub
from sys import stdout

html = get('http://www.hidemyass.com/proxy-list/').content
html = html.split('<table id="listtable"')[1].split('</table')[0]
html = html.split('<tr')[2:]

checkClass = lambda x: x.group(2) if x.group(1) not in classesBad else ''

for tr in html:
    css = tr.split('<style>\n')[1].split('\n<')[0].split('\n')

    classesBad = [rule[1:5] for rule in css if 'display:none' in rule]

    ip = tr.split('</style>')[1].split('</span></td>')[0]
    ip = sub('<(?:span|div) style="display:none">.+?</(?:span|div)>', '', ip)
    ip = sub('<span style="display: inline">(.+?)</span>', r'\1', ip)
    ip = sub('<span class="(.+?)">(.+?)</span>', checkClass, ip)
    ip = ip.replace('<span></span>', '')

    port = tr.split('<td>\n')[1].split('<')[0]

    protocol = tr.split(' \n             <td>')[1].split('<')[0].lower()

    print '%s://%s:%s/' % (protocol, ip, port)
于 2013-09-18T14:31:34.810 回答
1

他们专门试图阻止您这样做。
(正如我在博客中描述的那样)

您可以要求他们提供 API,或者您可以尝试使用 CSS 引擎来确定将显示哪些元素。

于 2013-09-17T19:02:03.077 回答