Поиск родного тега в BeautifulSoup без атрибутов - PullRequest
0 голосов
/ 12 июля 2019

Извините, вопрос о BeatifulSoup для новичков, но я не могу найти ответ.

У меня проблемы с поиском способа очистки тегов HTML без атрибутов.

Вот раздел кода.

<tr bgcolor="#ffffff">
 <td>
  No-Lobbying List
 </td>
 <tr bgcolor="#efefef">
  <td rowspan="2" valign="top">
   6/24/2019
  </td>
  <td>
   <a href="document.cfm?id=322577" target="_blank">
    Brian Manley, Chief of Police, Austin Police Department
   </a>
   <a href="document.cfm?id=322577" target="_blank">
    <img alt="Click here to download the PDF document" border="0"     height="16"     src="https://assets.austintexas.gov/edims/images/pdf_icon.gif"     width="16"/>
   </a>
  </td>
  <tr bgcolor="#efefef">
   <td>
    Preliminary 2018 Annual Crime Report - Executive Summary
   </td>
  </tr>
 </tr>
</tr>

Как перейти к тегу с текстом «Предварительный годовой отчет о преступности за 2018 год - Резюме»?

Я пытался перейти от a с атрибутом и использовать .next_sibling, но я потерпел неудачу.

Спасибо.

trgrewy = soup.findAll('tr', {'bgcolor':'#efefef'}) #the cells alternate colors
trwhite = soup.findAll('tr', {'bgcolor':'#ffffff'}) 
trs = trgrewy + trwhite #merge them into a list
for item in trs:
    mdate = item.find('td', {'rowspan':'2'}) #find if it's today's date
    if mdate:
        datetime_object = datetime.strptime(mdate.text, '%m/%d/%Y')
        if datetime_object.date() == now.date():
            sender = item.find('a').text
            pdf = item.find('a')['href']
            link = baseurl + pdf
            title = item.findAll('td')[2] #this is where i've failed

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Вы можете использовать селекторы CSS:

data = '''
<tr bgcolor="#ffffff">
 <td>
  No-Lobbying List
 </td>
 <tr bgcolor="#efefef">
  <td rowspan="2" valign="top">
   6/24/2019
  </td>
  <td>
   <a href="document.cfm?id=322577" target="_blank">
    Brian Manley, Chief of Police, Austin Police Department
   </a>
   <a href="document.cfm?id=322577" target="_blank">
    <img alt="Click here to download the PDF document" border="0"     height="16"     src="https://assets.austintexas.gov/edims/images/pdf_icon.gif"     width="16"/>
   </a>
  </td>
  <tr bgcolor="#efefef">
   <td>
    Preliminary 2018 Annual Crime Report - Executive Summary
   </td>
  </tr>
 </tr>
</tr>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

# This will find date
print(soup.select_one('td[rowspan="2"]').get_text(strip=True))

# This will find next row after the row with date
print(soup.select_one('tr:has(td[rowspan="2"]) + tr').get_text(strip=True))

Отпечатки:

6/24/2019
Preliminary 2018 Annual Crime Report - Executive Summary

Дополнительные сведения:

Справочник по селекторам CSS

0 голосов
/ 12 июля 2019

Я думаю, вы должны попробовать это

page = BeautifulSoup(HTML_TEXT)

text = page.find('td').findAll(text=True, recursive=False)

for i in text:
    print i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...