Игнорировать значения N / A в td beautifulsoup - PullRequest
0 голосов
/ 03 мая 2018

Я хочу удалить значения N / A в td того же класса

  <td align="left" class="category"> N/A</td>
<td align="left" class="title"> <a href="article-feb-0243.html">Wall Street cool to eBay's profit</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2017.html">Warnings about junk mail deluge</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2660.html">Web radio takes Spanish rap global</a></td>
<td align="left" class="category"> sport</td>

Я хочу очистить категорию и заголовок, но в категории хочу игнорировать значения N / A

for td in parsed_html.body.findAll('td',{"class":lambda class_: class_ in ("category","title")}):
                print(td)
                category=td.parent.find("td",attrs={"class":"category"}).text

                if(not td.parent.find("i")):
                    url=td.parent.find("a")["href"]

Я попытался сопоставить строку с N / A, но она не работает

1 Ответ

0 голосов
/ 03 мая 2018

Прежде всего, вам не нужно использовать пользовательскую функцию для сопоставления нескольких классов. Вы можете передать различные классы в виде списка.

Во-вторых, есть два способа получить то, что вы хотите. Вы можете просто проверить, содержит ли текст N/A, итерируя по всем тегам <td>, и пропустить тег, если он присутствует.

html = '''
<td align="left" class="category"> N/A</td>
<td align="left" class="title"> <a href="article-feb-0243.html">Wall Street cool to eBay's profit</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2017.html">Warnings about junk mail deluge</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2660.html">Web radio takes Spanish rap global</a></td>
<td align="left" class="category"> sport</td>'''

soup = BeautifulSoup(html, 'lxml')
for td in soup.find_all('td', class_=['category', 'title']):
    if 'N/A' in td.text:
        continue
    print(td)

Выход:

<td align="left" class="title"> <a href="article-feb-0243.html">Wall Street cool to eBay's profit</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2017.html">Warnings about junk mail deluge</a></td>
<td align="left" class="category"> technology</td>
<td align="left" class="title"> <a href="article-feb-2660.html">Web radio takes Spanish rap global</a></td>
<td align="left" class="category"> sport</td>

Вы также можете сделать это с помощью пользовательской функции.

for td in soup.find_all(lambda tag: tag.name == 'td' and tag['class'][0] in ('category', 'title') and 'N/A' not in tag.text):
    print(td)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...