بيثون-تحليل شكل هتمل مع لكسمل.هتمل مع بناء جملة زباث

StackOverflow https://stackoverflow.com//questions/22027488

  •  21-12-2019
  •  | 
  •  

سؤال

هنا هو النموذج.يظهر نفس النموذج الدقيق مرتين في المصدر.

<form method="POST" action="/login/?tok=sess">
<input type="text" id="usern" name="username" value="" placeholder="Username"/>
<input type="password" id="passw" name="password" placeholder="Password"/>
<input type="hidden" name="ses_token" value="token"/>
<input id="login" type="submit" name="login" value="Log"/>
</form>

أنا الحصول على سمة "العمل" مع هذا الرمز الحمر

import lxml.html
tree = lxml.html.fromstring(pagesource)
print tree.xpath('//action')
raw_input()

وبما أن هناك شكلين ، فإنه يطبع كل من السمات

['/login/?session=sess', '/login/?session=sess']

كيف يمكنني الحصول عليه لطباعة واحدة فقط?أنا فقط بحاجة إلى واحد ، لأنها نفس الشكل بالضبط.

لدي أيضا سؤال ثان

كيف يمكنني الحصول على قيمة الرمز المميز?أنا أتحدث عن هذا الخط:

 <input type="hidden" name="ses_token" value="token"/>

أحاول رمز مماثل,

import lxml.html
tree = lxml.html.fromstring(pagesource)
print tree.xpath('//value')
raw_input()

ومع ذلك ، نظرا لأن أكثر من سمة واحدة تسمى القيمة ، فسيتم طباعتها

['', 'token', 'Log In', '', 'token', 'Log In'] # or something close to that

كيف يمكنني الحصول على الرمز المميز فقط?واحد فقط?

هل هناك طريقة أفضل للقيام بذلك?

هل كانت مفيدة؟

المحلول

استخدام find() بدلا من xpath(), ، منذ find() إرجاع المباراة الأولى فقط.

في ما يلي مثال يعتمد على الكود الذي قدمته:

import lxml.html


pagesource = """<form method="POST" action="/login/?session=sess">
<input type="text" id="usern" name="username" value="" placeholder="Username"/>
<input type="password" id="passw" name="password" placeholder="Password"/>
<input type="hidden" name="ses_token" value="token"/>
<input id="login" type="submit" name="login" value="Log In"/>
</form>
<form method="POST" action="/login/?session=sess">
<input type="text" id="usern" name="username" value="" placeholder="Username"/>
<input type="password" id="passw" name="password" placeholder="Password"/>
<input type="hidden" name="ses_token" value="token"/>
<input id="login" type="submit" name="login" value="Log In"/>
</form>
"""

tree = lxml.html.fromstring(pagesource)
form = tree.find('.//form')

print "Action:", form.action
print "Token:", form.find('.//input[@name="ses_token"]').value

المطبوعات:

Action: /login/?session=sess
Token: token

نأمل أن يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top