Как я могу разобрать строки в таблице, которые состоят из ячеек, которые не просто <td>, а случайные <th>ячейка? - PullRequest
1 голос
/ 01 мая 2019

Я все еще новичок в python и я очень новичок в BeautifulSoup.Я работал над созданием веб-скребка, используя BeautifulSoup, чтобы входить и разбирать каталоги отделов с веб-сайтов.Каталоги структурированы в виде HTML-таблицы.Как и ожидалось, большинство ячеек имеют теги td;однако есть случайная ячейка, которая является тегом th, которую мне также нужно проанализировать.

Большинство этих страниц .aspx, и я прочитал, что для их очистки веб-драйвернеобходимо.Это мой исходный код, в большинстве случаев BeautifulSoup использовался с запросами, поэтому я не уверен, правильно ли он используется с веб-драйвером.

url = "https://webberathletics.com/staff.aspx"
driver = webdriver.Chrome(r"C:\Users\bobby\OneDrive\Documents\MyPrograms\webdrivers\chromedriver.exe")
driver.implicitly_wait(30)
driver.get(url)

soup = BeautifulSoup(driver.page_source, 'html.parser')
contacts_list = []

Я собираюсь добавить намного больше URL-адресовчтобы разобрать скребок, поэтому я пытаюсь сделать скребок максимально динамичным, то есть он будет очищать таблицы, содержащие строки с ячейкой th, а другие - нет.Ниже приведено то, что у меня есть в данный момент.

Я хочу, чтобы он проанализировал ячейку, td или th.

for row in soup.find_all('tr'):
    cells = row.find_all('td', 'th')

    if len(cells) > 0:
        col1 = cells[0].text.strip()
        col2 = cells[1].text.strip()
        col3 = cells[2].text.strip()
        col4 = cells[3].text.strip()

        contact = {'col1': col1, 'col2': col2, 'col3': col3, 'col4': col4}
        contacts_list.append(contact)

        print(contacts_list)

.на всех, но он работает, поэтому я не уверен, работает ли он правильно или нет.Но даже если он напечатал, я не уверен, правильно ли я поступаю.

1 Ответ

0 голосов
/ 01 мая 2019

Если вы собираетесь очищать таблицы с тегом <table>, я бы предпочел просто использовать Pandas .read_html().Тяжелая работа для вас.

from selenium import webdriver
import pandas as pd


url = "https://webberathletics.com/staff.aspx"
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.implicitly_wait(30)
driver.get(url)

tables = pd.read_html(driver.page_source)
df = tables[1]
df = df[pd.isnull(df['Image'])].drop(['Image'], axis=1)

driver.close()

Вывод:

print (df)

Редактировать:

Если вы хотитесохранить эти «подзаголовки»:

from selenium import webdriver
import pandas as pd


url = "https://webberathletics.com/staff.aspx"
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.implicitly_wait(30)
driver.get(url)

tables = pd.read_html(driver.page_source)
df = tables[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...