Как найти класс TD в HTML-код с помощью Python? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть класс в моем HTML-коде. Мне нужно найти класс TD "Currentlocation" с помощью Python.

КОД:

<td class="CURRENTLOCATION"><img align="MIDDLE" src="..\Images\FolderOpen.bmp"/> Metrics</td>

Ниже приведены коды, которые я пробовал.

Первая попытка:

My_result = page_soup.find_element_by_class_name('CURRENTLOCATION')

Получение ошибки «TypeError: объект NoneType не вызывается». Вторая попытка:

My_result = page_soup.find(‘td’, attrs={‘class’: ‘CURRENTLOCATION’})

Ошибка «Недопустимый символ в идентификаторе».

Может кто-нибудь помочь мне найти класс в HTML-коде с использованием Python?

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018
from bs4 import BeautifulSoup
sdata = '<td class="CURRENTLOCATION"><img align="MIDDLE" src="..\Images\FolderOpen.bmp"/> Metrics</td>'
soup = BeautifulSoup(sdata, 'lxml')
mytds = soup.findAll("td", {"class": "CURRENTLOCATION"})
for td in mytds: 
    print(td)
0 голосов
/ 01 ноября 2018

Я попробовал ваш код, второй пример, и проблема в кавычках, которые вы используете. Для меня они апострофы (‘, кодовая точка Unicode \ u2019), в то время как интерпретатору python требуются одинарные (') или двойные (") кавычки.

Меняя их, я могу найти тег:

>>> bs.find('td', attrs={'class': 'CURRENTLOCATION'})
<td class="CURRENTLOCATION"><img align="MIDDLE" src="..\Images\FolderOpen.bmp"/> Metrics</td>

О вашем первом примере. Я не знаю, где вы найдете ссылку на метод find_element_by_class_name, но, похоже, он не реализован классом BeautifulSoup. Вместо этого класс реализует специальный метод __getattr__, который вызывается каждый раз, когда вы пытаетесь получить доступ к несуществующему атрибуту. Вот выдержка из метода:

def __getattr__(self, tag):
    #print "Getattr %s.%s" % (self.__class__, tag)
    if len(tag) > 3 and tag.endswith('Tag'):
        #
    # We special case contents to avoid recursion.
    elif not tag.startswith("__") and not tag == "contents":
        return self.find(tag)

Когда вы пытаетесь получить доступ к атрибуту find_element_by_class_name, вы фактически ищете тег с тем же именем.

0 голосов
/ 01 ноября 2018

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

import re
from bs4 import BeautifulSoup 
text = '<td class="CURRENTLOCATION"><img align="MIDDLE" src="..\Images\FolderOpen.bmp"/> Metrics</td>'
soup = BeautifulSoup(text, 'lxml')
output_list = soup.find_all('td',{"class": "CURRENTLOCATION"}) # I am looking for all the td tags whose class atrribute is set to CURRENTLOCATION 
...