Очистите данные таблицы, используя панды / красивый суп (вместо селена, что медленно?), Реализация BS не работает - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь очистить веб-данные на этом веб-сайте, и единственный способ, которым я смог получить доступ к данным, - это итерация по строкам таблицы, добавление их в список (затем добавление их во фрейм данных pandas / запись в csv), а затем переход на следующую страницу и повторение процесса [около 50 страниц на поиск, и моя программа выполняет более 100 запросов]. Это супер медленно / неэффективно, и мне было интересно, есть ли способ эффективно добавить все данные, используя панды или красивый суп, вместо того, чтобы перебирать каждую строку / столбец.

url = "https://claimittexas.org/app/claim-search"

rows = driver.find_elements_by_xpath("//tbody/tr")
    try:
        for row in rows[1:]:
            row_array = []
            #print(row.text) # prints the whole row
            for col in row.find_elements_by_xpath('td')[1:]:
                row_array.append(col.text.strip())
            table_array.append(row_array)
        df = pd.DataFrame(table_array)
        df.to_csv('my_csv.csv', mode='a', header=False)
    except:
        print(letters + "no table exists")

РЕДАКТИРОВАТЬ: Я пытался чистить, используя красивый суп, то, что я пытался в начале недели и о котором писал, но я не могу получить доступ к таблице без использования селена

В версии bs я поместил несколько операторов print, чтобы увидеть, что было не так, и в нем значение строк - просто пустой список

html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
rows = soup.find('table').find('tbody').find_all(('tr')[1:])
for row in rows[1:]:
    cells = row.find_all('td')
    for cell in cells[1:]:
        print(cell.get_text())

1 Ответ

0 голосов
/ 18 сентября 2018

используйте эту строку для реализации кода BS4

rows = soup.find('table').find('tbody').find_all('tr')[1:]

вместо

rows = soup.find('table').find('tbody').find_all(('tr')[1:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...