我试图从巴西的一个法院那里收集一些数据(是的,这是法律的的),一切都很顺利,除了一件事:我无法设置一个功能,点击按钮改变页面,重新做刮代码,并添加数据到df(我试图使用var设置为刮+.append()
,没有成功-我使用它正确吗?)
有什么建议吗
MWE:
import time
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
url = "https://scon.stj.jus.br/SCON/legaplic/toc.jsp?materia=%27Lei+8.429%2F1992+%28Lei+DE+IMPROBIDADE+ADMINISTRATIVA%29%27.mat.&b=TEMA&p=true&t=&l=1&i=18&ordem=MAT,@NUM"
option = Options()
option.headless = True
driver = webdriver.Firefox()
driver.get(url)
time.sleep(5)
driver.find_element(by=By.LINK_TEXT, value='§ 6o A ação será instruída com documentos ou justificação que contenham indícios suficientes da existência do ato de improbidade ou com razões fundamentadas da impossibilidade de apresentação de qualquer dessas provas, observada a legislação vigente, inclusive as disposições inscritas nos arts. 16 a 18 do Código de Processo Civil. (Incluído pela Medida Provisória nº 2.225-45, de 2001)').click()
time.sleep(5)
driver.switch_to.window(driver.window_handles[-1]) # Change the focus to the new page, otherwise I can not scrap its content
element = driver.find_element(by=By.CLASS_NAME, value="listadocumentos")
html_content = element.get_attribute('outerHTML')
resultados = BeautifulSoup(driver.page_source, 'lxml')
paragrafoBRS = resultados.find_all('div', attrs={'class':'paragrafoBRS'})
driver.find_element(by=By.CLASS_NAME, value='iconeProximaPagina.temHint').click()
resultados # Also tried resultados.append()
paragrafoBRS # Also tried paragrafoBRS.append()
driver.quit()
header = []
content = []
for each in paragrafoBRS:
header.append(each.find('div', {'class':'docTitulo'}).text)
content.append(each.find(['div','pre'], {'class':'docTexto'}).text)
dataDict = {}
df = pd.DataFrame()
for i in range(len(header)):
if header[i] in dataDict:
df = df.append(pd.DataFrame(dataDict), ignore_index=True)
dataDict = {}
dataDict[header[i]] = [content[i]]
df.to_excel('data.xlsx')
1条答案
按热度按时间x8diyxa71#
在
click()
之后,selenium会自动更新driver.page_source
,但不会更新resultados
和其他变量,您必须再次运行这将替换旧的内容,因此您应该首先运行
for each in paragrafoBRS:
从第一页获取数据,然后运行click()
,然后再次加载resultados
并再次运行for each in paragrafoBRS:
从下一页获取数据。就像这样:
编辑:
我无法测试它,因为服务器拒绝连接在这一刻。
如果你想在
for
循环中运行得到ie。5页如果你想在
while
-loop中运行以获取所有页面。我使用
try/except
来检测点击链接到下一页时出现的问题-然后我使用break
退出循环