Получить информацию из внутреннего тега - BeautifulSoup4 (Python 3) - PullRequest
0 голосов
/ 28 марта 2020

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

emails = []
membership_url = 'http://url/members?letter=a'
print(membership_url)
member_page = s.get(membership_url)
soup = BeautifulSoup(member_page.content, 'html5lib')
members = soup.findAll("table")[4]
tds = members.findAll("td")
print(tds)

ВЫБОР ОБРАЗЦА:

<td><a href="../../options/johndoe--at--gmail.com">johndoe@gmail.com</a><br/><input name="johndoe%40gmail.com_realname" size="24" type="TEXT" value="John Doe"/><input name="user" type="HIDDEN" value="johndoe%40gmail.com"/></td>

Я не знаю много о bs4 или HTML, так что повезло, что я зашел так далеко. В идеале я хотел бы вытащить и johndoe@gmail.com и настоящее имя "Джон Доу". Все, что я могу получить прямо сейчас - это электронное письмо между тегами.

1 Ответ

2 голосов
/ 29 марта 2020

Не видя остальную часть html, здесь есть возможность для bs4 4.7.1 +, который ищет два смежных тега input, где у соседнего есть атрибут name со значением user. Ваш пробег может меняться с полной html. + Это соседний братский комбинатор.

from bs4 import BeautifulSoup as bs
import requests
import urllib.parse

s = '<td><a href="../../options/johndoe--at--gmail.com">johndoe@gmail.com</a><br/><input name="johndoe%40gmail.com_realname" size="24" type="TEXT" value="John Doe"/><input name="user" type="HIDDEN" value="johndoe%40gmail.com"/></td>'
soup = bs(s)
node = soup.select_one('input:has(+input[name=user])')
print(node['value'], ' ' ,urllib.parse.unquote(node['name']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...