У меня проблемы с циклом (кажется, все время 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 чередуются как «нечетные» и «четные».
По сути, я пытаюсь сосчитать от 0 до 3, очистить все элементы TR и все элементы TE и записать все в файл CSV. Это внутренний URL-адрес, защищенный корпоративным брандмауэром, поэтому я не могу поделиться здесь фактическим.
Я использую Python 3.6.
Чтобы проверить, нужен ли вам Selenium, я рекомендую проверить исходный код страницы и проверить, доступны ли элементы tr и td. Если это не так, вам, вероятно, понадобится Selenium, так как это страница, отображаемая на JavaScript.
Да, да, я разобрался с проблемой cnt. Я не могу очистить все элементы TR и TD. Я думаю, что в первом сценарии я не был авторизован на сайте, поэтому я буквально ничего не мог захватить (хотя администратор сайта утверждает, что как только вы вошли в систему, вы всегда входите в систему). Я думаю, что это больше связано с чем-то в JavaScript ... Я думаю, что таблицы генерируются динамически. Я думаю, что это настоящая проблема. Итак, я считаю, что реальный вопрос заключается в том, как я могу очистить элементы TR и элементы TD с помощью Selenium ???
Попробуйте использовать soup.select (таблица tr). Если это не дало результатов, тогда да, вам следует использовать Selenium
Да, в итоге я перешел на Selenium, и это сработало для меня. Зачем именно это нужно? Похоже, таблицы генерируются динамически или что-то в этом роде. Как браузер может это видеть, а базовый Python не видит? Спасибо.
Все, что я знаю, это то, что запросы имеют доступ только к исходному коду. Динамически отображаемые страницы в основном содержат теги скриптов в исходном коде. Поэтому нельзя использовать запросы и bs4. С другой стороны, Selenium действует как настоящий «человек», просматривающий Интернет. В этом случае создаются таблицы и отображаются теги.
Обязательно ознакомьтесь со следующими страницами:
Начиная (Стандартные вещи для запуска вашего скрипта) https://selenium-python.readthedocs.io/getting-started.html
После того, как вы инициализировали драйвер, вы можете найти его содержимое с помощью методов, найденных здесь: https://selenium-python.readthedocs.io/navigating.html
В вашем случае вам, вероятно, понадобится что-то вроде ниже; пройтись по списку и записать содержимое в файл.
td_list = driver.find_elements_by_tag_name('td')
В чем именно проблема? Просто cnt кажется все время равным 0 или вы получаете значения empy при очистке элементов tr и td?