在Python使用Selenium在 CSV 文件中抓取和保存表格数据
Selenium WebDriver是一个开源 API,它允许您以与真实用户相同的方式与浏览器交互,并且它的脚本是用各种语言编写的,例如Python、 Java、C# 等。这里我们将使用Python来抓取从网络上的表格中提取数据并将其存储为 CSV 文件。由于谷歌浏览器是最受欢迎的浏览器,为了方便起见,我们将使用它。为了进一步存储数据,我们将使用Python的pandas和csv模块。
注意:请确保您的系统中安装了 chromedriver,并且它必须与Python文件位于同一文件夹中。可以在此处找到 chromedriver。
首先,我们需要为这个selenium WebDriver 定位表的元素。我们将使用xpath方法,因为网页中的大多数元素都有唯一的 xpath。
分步实施:
第一步:导入需要的模块。
Python3
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
import time
import pandas as pd
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import csv
Python3
driver = webdriver.Chrome(
executable_path='/usr/lib/chromium-browser/chromedriver')
driver.get('https://www.geeksforgeeks.org/selenium-python-tutorial/')
Python3
driver.implicitly_wait(10)
driver.maximize_window()
Python3
while(1):
try:
method=driver.find_element_by_xpath('//*[@id="post-427949"]\
/div[3]/table[2]/tbody/tr['+str(r)+']/td[1]').text
Desc=driver.find_element_by_xpath('//*[@id="post-427949"]\
/div[3]/table[2]/tbody/tr['+str(r)+']/td[2]').text
Table_dict={
'Method':method,
'Description':Desc
}
templist.append(Table_dict)
df=pd.DataFrame(templist)
r+=1
except NoSuchElementException:
break
Python3
df.to_csv('table.csv')
driver.close()
Python3
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
import time
import pandas as pd
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import csv
driver = webdriver.Chrome(executable_path =
'/usr/lib/chromium-browser/chromedriver')
driver.get('https://www.geeksforgeeks.org/selenium-python-tutorial/')
driver.implicitly_wait(10)
driver.maximize_window()
r=1
templist = []
while(1):
try:
method=driver.find_element_by_xpath('//*[@id="post-427949"]\
/div[3]/table[2]/tbody/tr['+str(r)+']/td[1]').text
Desc=driver.find_element_by_xpath('//*[@id="post-427949"]/\
div[3]/table[2]/tbody/tr['+str(r)+']/td[2]').text
Table_dict={ 'Method': method,
'Description':Desc}
templist.append(Table_dict)
df = pd.DataFrame(templist)
r + = 1
# if there are no more table data to scrape
except NoSuchElementException:
break
# saving the dataframe to a csv
df.to_csv('table.csv')
driver.close()
第 2 步:使用可变驱动程序初始化 Web 浏览器,提及可执行文件路径 作为您拥有 chromedriver 文件的位置,并指向所需的 URL。
蟒蛇3
driver = webdriver.Chrome(
executable_path='/usr/lib/chromium-browser/chromedriver')
driver.get('https://www.geeksforgeeks.org/selenium-python-tutorial/')
第 3 步:等待网页加载。你可以通过implicitly_wait( ) 方法来做到这一点。当完全加载时,使用maximize_window()最大化窗口。
蟒蛇3
driver.implicitly_wait(10)
driver.maximize_window()
第 4 步:尝试在行的 xpath 中找到模式并使用 find_element_by_xpath() 定位它们,并运行循环以查找所有表格单元格,并通过在每个定位元素的末尾添加.text()将它们转换为文本通过广义xpath。
蟒蛇3
while(1):
try:
method=driver.find_element_by_xpath('//*[@id="post-427949"]\
/div[3]/table[2]/tbody/tr['+str(r)+']/td[1]').text
Desc=driver.find_element_by_xpath('//*[@id="post-427949"]\
/div[3]/table[2]/tbody/tr['+str(r)+']/td[2]').text
Table_dict={
'Method':method,
'Description':Desc
}
templist.append(Table_dict)
df=pd.DataFrame(templist)
r+=1
except NoSuchElementException:
break
第 5 步:将 Dataframe 导出为 CSV 文件并关闭浏览器的出口。
蟒蛇3
df.to_csv('table.csv')
driver.close()
下面是完整的实现:
蟒蛇3
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
import time
import pandas as pd
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import csv
driver = webdriver.Chrome(executable_path =
'/usr/lib/chromium-browser/chromedriver')
driver.get('https://www.geeksforgeeks.org/selenium-python-tutorial/')
driver.implicitly_wait(10)
driver.maximize_window()
r=1
templist = []
while(1):
try:
method=driver.find_element_by_xpath('//*[@id="post-427949"]\
/div[3]/table[2]/tbody/tr['+str(r)+']/td[1]').text
Desc=driver.find_element_by_xpath('//*[@id="post-427949"]/\
div[3]/table[2]/tbody/tr['+str(r)+']/td[2]').text
Table_dict={ 'Method': method,
'Description':Desc}
templist.append(Table_dict)
df = pd.DataFrame(templist)
r + = 1
# if there are no more table data to scrape
except NoSuchElementException:
break
# saving the dataframe to a csv
df.to_csv('table.csv')
driver.close()
输出: