2012-06-26 2 views
0

Я использую SCRAPY ползать паук и пытаюсь разобрать вывод страниц для выбора всех параметров ввода тегов в качестве следующего: типаSCRAPY Xpath запрос для выбора элементов ввода тегов (Баунтите)

  • ввода: должно быть (текст или пароль или файл)
  • Идентификатор ввода: если он не найден, выберите [имя входа].

i worte образец кода для испытания в scrapy shell, но он не дает мне точного результата , так что вы можете мне помочь?

испытания сайт: http://testaspnet.vulnweb.com/Signup.aspx

>>> hxs.select('//input[@id] | //input[@type="text"] | /text()').extract() 

[u'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTY0MzI4NjU4Mw9kFgICAQ9kFgICAQ9kFgQCAQ8WBB4EaHJlZgUKbG9naW4uYXNweB4JaW5uZXJodG1sBQVsb2dpbmQCAw8WBB8AZB4HVmlzaWJsZWhkZHEZ3VN6SP/C2xESDN/Y3p8zhfSB">', 

u'<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWWgKJ+8rsBQLStq24BwK3jsrkBALF97vxAQKozoCcCQKpzpj7DgKSnr/eCQKSnr/eCQKSntPyAgKSntPyAgKSnseJCgKSnseJCgKSnvusAwKSnvusAwKSnu/DDAKSnu/DDAKSnoPmBQKSnoPmBQKSnre9DQKSnre9DQKSnqvQBgKSnqvQBgKSnp+5AwKSnp+5AwKSnrPcDAKSnrPcDAL3pJ3FDwL3pJ3FDwL3pLGYBwL3pLGYBwL3pKU/AvekpT8C96TZ0wkC96TZ0wkC96TN9gIC96TN9gIC96ThjQoC96ThjQoC96SVoAMC96SVoAMC96SJxwwC96SJxwwC96T9rAkC96T9rAkC96SRwwIC96SRwwICyMvj6AUCyMvj6AUCyMuXjw0CyMuXjw0CyMuLogYCyMuLogYCyMu/+Q8CyMu/+Q8CyMvTnQcCyMvTnQcCyMvHMALIy8cwAsjL+9cJAsjL+9cJAsjL7+oCAsjL7+oCAsjLw9MPAsjLw9MPAsjL9/YIAsjL9/YIAq3SwZ8KAq3SwZ8KAq3S9bIDAq3S9bIDAq3S6ckMAq3S6ckMAq3SnewFAq3SnewFAq3SsYMNAq3SsYMNAq3SpaYGAq3SpaYGAq3S2foPAq3S2foPAq3SzZEHAq3SzZEHAq3SofkFAq3SofkFAq3S1Z0NAq3S1Z0NAob5pwUChvmnBQKG+dvZCQKG+dvZCaCOP7DYDQ3mNEhISrmdoTKH9Tws">', 

    u'<input name="tbUsername" type="text" id="tbUsername" class="Login">', 

    u'<input name="tbPassword" type="password" id="tbPassword" class="Login">', 

    u'<input type="submit" name="btnSignup" value="Sign me up" id="btnSignup">'] 

ответ

0

Я не знаю Scrapy, но с чисто XPath точки зрения, следующие должны удовлетворять требованиям, которые Вы описываете:

//input[(@id or @name) and (@type = 'text' or @type = 'password' or @type = 'file')] 

Кроме того, я обратите внимание, что вы пытаетесь получить текстовое содержимое выбранных узлов. Это, по-видимому, не вернет ничего, потому что входы являются самозакрывающимися тегами и не содержат внутреннего содержимого.

+0

'|/text() 'любой текст прямо под root (что не имеет особого смысла) - не текст выбранных узлов – MiMo

+0

спасибо за помощь, но я получил эту ошибку [error picture] (https: // www. dropbox.com/s/mhj5exle5pof7wz/s_invalid.png) –

+0

Это похоже на то, что вы используете одинарные кавычки внутри одинарных кавычек. Сделайте свой двойной, то есть те, которые обертывают все выражение XPath. – Utkanos

2

Все input элементы типа text, password или file:

//input[@type='text' or @type='password' or @type='file'] 

Я не уверен, что условие вы хотите на идентификатор или имя - это получить все input элементы этих трех типов, которые имеют либо имя идентификатор или:

//input[(@type='text' or @type='password' or @type='file') and (@id or @name)] 

Если вы хотите проверить для идентификатора или имени (если идентификатор не существует) равно что-то (XXXX):

//input[(@type='text' or @type='password' or @type='file') and (@id='XXXX' or (not(@id) and @name='XXXX'))] 

Если вы хотите извлечь идентификатор:

//input[@type='text' or @type='password' or @type='file']/@id 

Я не думаю, что extracing идентификатора или имя, если идентификатор не указан возможно со стандартным XPaths.

+0

спасибо большое за помощь, но я получил эту ошибку (также такая же ошибка выше [изображение ошибки] (https://www.dropbox.com/s/mhj5exle5pof7wz/s_invalid.png) –

+0

Я также подумал, что это может быть проблема с котировками, поэтому я использовал тройные кавычки, но я получил пустой список как resullt [picture] (https://www.dropbox.com/s/3d77ad310b4ust2/tripleQuotes.png) –

+0

Попробуйте использовать одинарные кавычки внутри XPath (в XPath single и двойные кавычки эквивалентны - так что если вам нужно использовать двойные кавычки, чтобы разграничить весь XPath, вы обычно можете использовать одиночные внутри XPath) – MiMo

Смежные вопросы