#python #selenium #beautifulsoup #python-requests
#python #selenium #beautifulsoup #python-запросы
Вопрос:
Я использую selenium для перехода по ссылке, но я не могу получить новую таблицу. какой код я использую для извлечения новой страницы?
df_list = []
url = 'https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1' # str(i)
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find_all('table')[0]
df = pd.read_html(str(table), encoding="UTF-8")
driver = webdriver.PhantomJS(executable_path = 'C:\Python27\phantomjs-2.1.1-windows\bin\phantomjs')
driver.get('https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1')
driver.find_element_by_xpath("/html[1]/body[1]/form[1]/div[1]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[52]/td[1]/table[1]/tbody[1]/tr[1]/td[2]/a[1]").click()
?????
table = soup.find_all('table')[0]
df = pd.read_html(str(table), encoding="UTF-8")
Комментарии:
1. Вау, я уверен, что есть лучший способ получить желаемую информацию, чем
driver.find_element_by_xpath("/html[1]/body[1]/form[1]/div[1]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[52]/td[1]/table[1]/tbody[1]/tr[1]/td[2]/a[1]").click()
….2. я могу стать лучше, но сначала я хочу получить новую таблицу
Ответ №1:
Если я понимаю ваш вопрос, это «Как мне получить HMTL из моего driver
объекта для новой страницы, которую я загрузил». Ответ был бы driver.page_source
driver.find_element_by_xpath("Some crazy shenanigans of an xpath").click()
html_from_page = driver.page_source
soup = bs4.BeautifulSoup(html_from_page, 'html.parser')
# more stuff
Комментарии:
1. Спасибо. Ошибка была в BeautifulSoup(html_from_page.text, ‘html.parser’) (html_from_page.text, ‘html.parser’)
Ответ №2:
Добро пожаловать в SO. Вот другой подход, при котором скрипт будет перебирать все таблицы (страницы) и получать данные.
df_list = []
url = 'https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1' # str(i)
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find_all('table')[0]
df = pd.read_html(str(table), encoding="UTF-8")
driver = webdriver.PhantomJS(executable_path = 'C:\Python27\phantomjs-2.1.1-windows\bin\phantomjs')
driver.get('https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1')
# get the number of pages and iterate each of them
numberOfPage = driver.find_element_by_xpath("(//tr[@class='tbpaging']//a)[last()]").text
for i in range(2,int(numberOfPage)):
# click on each page link and then get the details
driver.find_element_by_xpath("(//tr[@class='tbpaging']//a)[" i "]").click()
soup = BeautifulSoup(driver.page_source, 'html.parser')
table = soup.find_all('table')[0]
df = pd.read_html(str(table), encoding="UTF-8")