Извлечь конкретное значение из HTML с помощью bs4 - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь извлечь значение тега HTML. HTML-код возвращается в ответе сайта после того, как я отправил ему запрос на публикацию.

HTML-фрагмент, который я хочу проанализировать, выглядит следующим образом:

<input name=\"secret\" type=\"hidden\" value=\"eyJ0aW1lc3RhbXAiOjE1NTQ2NjIyMzksImFjdGlvbiI6IlwvY2FydFwvcGx1c1wvMWNlNzUtMTEzNzYzIn0=\">\n    <input name=\"product_id\" type=\"hidden\" value=\"156863\">\n    <input name=\"product_bs_id\"  type=\"hidden\" value=\"113763\">\n    <input type=\"hidden\" name=\"amount\" type=\"text\" value=\"1\">\n    

Я хочу значение с именем secret

Я пытался решить это так:

soup=bs(req.text, 'lxml')
secret=soup.find('input',{'name':'secret'})['value']

Из-за этих обратных косых черт я тоже попробовал это так:

secret=soup.find('input',{'name':'secret'})['value']

Но я все равно всегда получал ошибку «NoneType not subscripts». По сути, он не нашел его. Любая подсказка? Большое спасибо.

1 Ответ

1 голос
/ 08 апреля 2019

Используйте CSS Selector для получения значения.

from bs4 import BeautifulSoup as bs

html='''<input name=\"secret\" type=\"hidden\" value=\"eyJ0aW1lc3RhbXAiOjE1NTQ2NjIyMzksImFjdGlvbiI6IlwvY2FydFwvcGx1c1wvMWNlNzUtMTEzNzYzIn0=\">\n
<input name=\"product_id\" type=\"hidden\" value=\"156863\">\n
<input name=\"product_bs_id\"  type=\"hidden\" value=\"113763\">\n
<input type=\"hidden\" name=\"amount\" type=\"text\" value=\"1\">\n    '''

soup=bs(html, 'lxml')
secret=soup.select_one('input[name^=\\secret]')
print(secret['value'])

Выход:

eyJ0aW1lc3RhbXAiOjE1NTQ2NjIyMzksImFjdGlvbiI6IlwvY2FydFwvcGx1c1wvMWNlNzUtMTEzNzYzIn0=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...