【问题标题】:How to recursively scrape table from pages using python selenium如何使用 python selenium 从页面中递归地刮取表格
【发布时间】:2019-08-11 21:20:15
【问题描述】:

我是 python 新手,我正在尝试从一个有多个页面的网站上抓取一个表格。我应该如何尝试让我的代码使用.click() 以及代码应该放在哪里以获得表格的动态抓取。

我正在尝试的网站是https://free-proxy-list.net/,我可以从第一页获取表格。我正在尝试获取所有页面并将它们放入熊猫数据框中。我已经将表中的信息放入字典并尝试将字典放入数据框中。然而,只有第一页能够插入到数据框中。我也需要其他页面的所有数据

【问题讨论】:

标签: python-3.x selenium xpath


【解决方案1】:
  1. 初始化空列表。
  2. 使用带条件的 while 循环检查 max_page 计数并迭代循环。
  3. 在每个页面迭代中附加列表。
  4. 将列表添加到 pandas Dataframe。
  5. 将整个数据导入 CSV 文件。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd

driver=webdriver.Chrome()
driver.get('https://free-proxy-list.net/')

page=1
max_page=15
IP=[]
Port=[]
Code=[]
Country=[]
Anonymity=[]
Google=[]
Https=[]
LastCheck=[]
while page<=max_page:

 rows= WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='proxylisttable']/tbody//tr")))
 for row in rows:
    IP.append(row.find_element_by_xpath('./td[1]').text)
    Port.append(row.find_element_by_xpath('./td[2]').text)
    Code.append(row.find_element_by_xpath('./td[3]').text)
    Country.append(row.find_element_by_xpath('./td[4]').get_attribute('textContent'))
    Anonymity.append(row.find_element_by_xpath('./td[5]').text)
    Google.append(row.find_element_by_xpath('./td[6]').get_attribute('textContent'))
    Https.append(row.find_element_by_xpath('./td[7]').text)
    LastCheck.append(row.find_element_by_xpath('./td[8]').get_attribute('textContent'))


 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@aria-controls='proxylisttable' and text()='Next']"))).click()
 page=page+1
 print('navigate to page: ' + str(page))

driver.close()

df=pd.DataFrame({"IP":IP,"Port":Port,"Code":Code,"Country":Country,"Anonymity":Anonymity,"Google":Google,"Https":Https,"Last_Checked":LastCheck})
print(df)
df.to_csv('output_IP.csv',index=False)

【讨论】:

  • 谢谢!我已经尝试将所有数据放入字典并设法抓取页面:) 感谢您的回答!
猜你喜欢
  • 2014-03-08
  • 2021-06-25
  • 2020-03-21
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 2019-08-12
  • 2011-12-29
  • 2018-08-01
相关资源
最近更新 更多