Вы забыли отправить пустую строку после строки запроса:
s.sendall("GET / HTTP/1.1\r\n\r\n")
Кроме того, HTTP 1.1 указывает, что вы должны добавить поле заголовка Host
, как описано в разделе Host в HTTP 1.1 RFC .
s.sendall("GET / HTTP/1.1\r\nHost: www.cnn.com\r\n\r\n")
Это FAQ:
//somexpression[$N]
означает «Найти каждый узел, выбранный //somexpression
, который является $N
-й дочерью его родителя».
Вы хотите:
(//input[@id="search_query"])[2]
Помните: оператор []
имеет более высокий приоритет (приоритет), чем аббревиатура //
.
Это похоже на работу:
/descendant::input[@id="search_query"][2]
Я использую это из «XSLT 2.0 и XPath 2.0 Programmer's Reference, 4th Edition» Майкла Кей.
Также имеется примечание в разделе «Сокращенный синтаксис» спецификации языка XML-маршрута http://www.w3.org/TR/xpath/#path-abbrev который дал ключ.
//input[@id='search_query'][2]
:/descendat-or-self::node()/child::input[attribute::id='search_query'][position()=2]
– user 24 October 2010 в 21:35