您好我正在尝试解析下面的html代码来获取这样的ip和端口
所以应该是这样的
IP:50.18.182.20 > Port: 443
IP:162.248.50.159 > Port: 80
但我一直得到它
IP:50.18.182.20 > Port: 443
IP:162.248.50.159 > Port: 443
端口应该与它们匹配,而不是使用相同的端口..?
任何帮助都非常棒。
这是html
<td><a title="Proxy details">50.18.182.20</a></td>
<td>443</td>
<td>
High Anonymous Proxy.
</td>
<td>HTTP, HTTPS</td>
<td><img alt="United States" title="United States" src="http://flagpedia.net/data/flags/mini/us.png" /> United States</td>
<td>San Francisco, California</td>
<td>15s</td>
<td>32.88%</td>
<td>10 Minutes ago.</td>
</tr>
<tr>
<td><a title="Proxy details">162.248.50.159</a></td>
<td>80</td>
<td>
High Anonymous Proxy.
</td>
<td>HTTP, HTTPS</td>
<td><img alt="United States" title="United States" src="http://flagpedia.net/data/flags/mini/us.png" /> United States</td>
<td>West Chester, Pennsylvania</td>
<td>8s</td>
<td>73.97%</td>
<td>1 Hour, 4 Minutes ago.</td>
和C#代码
var htmlD = htmlDoc.DocumentNode.SelectNodes("//a[@title='Proxy details']");
var numberProxies = htmlD.Count;
for (var index = 0; index < numberProxies; index++)
{
Console.WriteLine("IP: " + htmlD[index].InnerText + " > Port: "+
htmlDoc.DocumentNode.SelectNodes("//td")[1].InnerText);
}
Console.ReadLine();
答案 0 :(得分:1)
您尝试从<td>
标记旁边的<td>
标记获取端口号包含您已找到但尚未正确执行的锚点。
事实上,您在此处选择了第一个.SelectNodes("//td")[1]
文档:htmlDoc.DocumentNode.SelectNodes("//td")[1].InnerText
。
尝试替换
htmlD[index].ParentNode.NextSibling.NextSibling.InnerText
带
id = 1
它将按预期工作。
答案 1 :(得分:0)
您获得与第二个查询相同的结果,虽然它使用上下文,但与您正在迭代的循环无关
相反,从逻辑上考虑一下,
ss
答案 2 :(得分:0)
在XPath中使用>>> sentence = 'munching macdonalds'
>>> first, *rest = sentence.split(' ')
>>> first
'munching'
>>> rest
['macdonalds']
>>> sentence = 'foo bar baz'
>>> first, *rest = sentence.split(' ')
>>> first
'foo'
>>> rest
['bar', 'baz']
时,您会在整个文档中查找节点的任何实例,因此会有效地脱离上下文并错误地返回第一个端口。尝试在上下文中搜索:
您可以尝试使用//
[NextSibling][1]
方法
答案 3 :(得分:0)
您可以将<td>
包含端口视为包含<td>
的{{1}}的第一个后续兄弟:
"Proxy details"