Как очистить все элементы TR и все элементы TD с нескольких URL-адресов? Может потребоваться селен

У меня проблемы с циклом (кажется, все время 0), и я даже не получаю элементы TR и TD со страницы 0, так что что-то определенно не так с моим скриптом.

from bs4 import BeautifulSoup
import requests
import pandas as pd
import csv

cnt = 0
# count from 0 to 3
while (cnt < 4):
    url = "https://www.anyurl/admin/?page = " + str(cnt)
    print(cnt)
    page = requests.get(url)
    pagetext = page.text
    # print(pagetext)

    soup = BeautifulSoup(pagetext, 'html.parser')
    #print(soup)

    file = open("C:/Users/ryans/OneDrive/Desktop/test.csv", 'w')

    for row in soup.find_all('tr'):
        for col in row.find_all('td'):
            info1 = row.text
            info2 = col.text
            file.write(info1)
            file.write(info2)

    print(cnt)        
    cnt = cnt + 1

    file.close()

Я думаю, что приведенный выше код довольно близок, но что-то здесь определенно не так.

Возможно, мне понадобится раствор Selenium, например, этот ...

import requests
import selenium
from selenium import webdriver
from bs4 import BeautifulSoup
from webbot import Browser
from selenium.webdriver.common.keys import Keys
import time

web = Browser()
cnt = 0
# count from 0 to 3
while (cnt < 4):
    url = "https://www.anyurl/admin/?page = " + str(cnt)
    web.go_to(url)
    time.sleep(2)

    # 1st validation
    web.type('[email protected]', into='username')
    web.click('Next')
    # Wait for 2 seconds
    time.sleep(2)

    # password
    web.type('my_password', into='Password')
    web.click('Next')
    time.sleep(2)



    Somehow...I need to iterate through TR elements and TD elements here....

    cnt = cnt + 1

Что я знаю точно, так это то, что существует таблица с таким названием: table id = "dags".

Также части TR и TD чередуются следующим образом:

Как очистить все элементы TR и все элементы TD с нескольких URL-адресов? Может потребоваться селен

Классы TR чередуются как «нечетные» и «четные».

По сути, я пытаюсь сосчитать от 0 до 3, очистить все элементы TR и все элементы TE и записать все в файл CSV. Это внутренний URL-адрес, защищенный корпоративным брандмауэром, поэтому я не могу поделиться здесь фактическим.

Я использую Python 3.6.

В чем именно проблема? Просто cnt кажется все время равным 0 или вы получаете значения empy при очистке элементов tr и td?

jxpython 27.09.2018 00:21

Чтобы проверить, нужен ли вам Selenium, я рекомендую проверить исходный код страницы и проверить, доступны ли элементы tr и td. Если это не так, вам, вероятно, понадобится Selenium, так как это страница, отображаемая на JavaScript.

jxpython 27.09.2018 00:27

Да, да, я разобрался с проблемой cnt. Я не могу очистить все элементы TR и TD. Я думаю, что в первом сценарии я не был авторизован на сайте, поэтому я буквально ничего не мог захватить (хотя администратор сайта утверждает, что как только вы вошли в систему, вы всегда входите в систему). Я думаю, что это больше связано с чем-то в JavaScript ... Я думаю, что таблицы генерируются динамически. Я думаю, что это настоящая проблема. Итак, я считаю, что реальный вопрос заключается в том, как я могу очистить элементы TR и элементы TD с помощью Selenium ???

ASH 27.09.2018 02:08

Попробуйте использовать soup.select (таблица tr). Если это не дало результатов, тогда да, вам следует использовать Selenium

jxpython 27.09.2018 12:52

Да, в итоге я перешел на Selenium, и это сработало для меня. Зачем именно это нужно? Похоже, таблицы генерируются динамически или что-то в этом роде. Как браузер может это видеть, а базовый Python не видит? Спасибо.

ASH 30.09.2018 16:48

Все, что я знаю, это то, что запросы имеют доступ только к исходному коду. Динамически отображаемые страницы в основном содержат теги скриптов в исходном коде. Поэтому нельзя использовать запросы и bs4. С другой стороны, Selenium действует как настоящий «человек», просматривающий Интернет. В этом случае создаются таблицы и отображаются теги.

jxpython 30.09.2018 18:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
385
1

Ответы 1

Обязательно ознакомьтесь со следующими страницами:

Начиная (Стандартные вещи для запуска вашего скрипта) https://selenium-python.readthedocs.io/getting-started.html

После того, как вы инициализировали драйвер, вы можете найти его содержимое с помощью методов, найденных здесь: https://selenium-python.readthedocs.io/navigating.html

В вашем случае вам, вероятно, понадобится что-то вроде ниже; пройтись по списку и записать содержимое в файл.

td_list = driver.find_elements_by_tag_name('td')

Другие вопросы по теме