Я пытаюсь использовать BeautifulSoup для получения информации из файлов HTML. После сужения супа через soup.table.table.tbody.find_all('table', attrs={'cellspacing': '0'})
, это тот тип html, с которым я должен работать (я удалил некоторые из html, чтобы сэкономить место):
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME CITY</td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME ADDRESS</td></tr>
<tr><td>SOME ADDRESS 2</td></tr>
<tr><td>SOME CITY, STATE, ZIPCODE</td></tr>
<tr><td><a class="icon_arrow" href="http://SOMEURL" onclick="window.open('http://SOMEWEBSITE'); return false;" target="_blank">Visit website</a></td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME NAME </td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td nowrap="nowrap">SOME TELEPHONE</td></tr>
<tr><td><a class="icon_arrow" href="/mcs/[email protected]" onclick="window.open(%=contactUs%); return false;" target="_blank">E-mail Me</a></td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME CTIY</td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME ADDRESS</td></tr>
<tr><td>SOME ADDRESS2</td></tr>
<tr><td>SOME CITY, STATE, ZIPCODE</td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME NAME </td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td nowrap="nowrap">SOME TELEPHONE</td></tr>
<tr><td><a class="icon_arrow" href="/mcs/[email protected]" onclick="window.open(%=contactUs%); return false;" target="_blank">E-mail Me</a></td></tr>
</tbody>
</table>
</table>
Формат для этих страниц аналогичен, некоторые из них содержат больше или меньше записей. Информация, которую меня интересует, - это НЕКОТОРЫЙ ГОРОД, НЕКОТОРЫЙ АДРЕС, НЕКОТОРЫЙ АДРЕС2, НЕКОТОРЫЙ ГОРОД, ГОСУДАРСТВО, ЗАПИСЬ, ИМЯ, НЕКОТОРЫЙ ТЕЛЕФОН и [email protected] (хотя это можно пропустить).
Глядя на html, кажется, что вся соответствующая информация находится между тегами. Мне просто сложно получить BS, чтобы найти те теги для извлечения информации.
Вы можете использовать такой код:
tables = soup.table.table.tbody.find_all('table', attrs={'cellspacing' : '0'})
for ta in tables:
tds = ta.find_all('td')
for td in tds:
text = td.get_text()
if "E-mail Me" not in text and "Visit website" not in text:
print text
поиск точной части в html-документе может выполняться с помощью определенных имен тегов и атрибутов, если это невозможно, например, в общедоступном html-документе, и структура документа предсказуема, подумайте об использовании позиции тега, что означает .fine_all('tag name')[nth location]
например:
>>> soup.find_all('table')[1].tbody.find_all('td')[2]
<td>SOME CITY, STATE, ZIPCODE</td>
Можете ли вы найти отдельные теги, добавив их в конец существующего кода? Я бы также сохранил его до некоторой переменной (он вернется как список, я уверен). Так что-то вроде
info =soup.table.table.tbody.find_all('table', attrs={'cellspacing' : '0'}).find_all('td')
Затем, чтобы извлечь, просто перейдите по списку с помощью get_text:
for item in info:
item.get_text()
find_all
, но каждый элемент в ResultSet имеет тип Tag и имеет метод find_all
find_all("td")
? Это даст вам список всех тэгов. Затем вы можете использоватьget_text
для получения информации между тегами. Пропустите «E-mail Me», если вы не хотите адрес электронной почты.