Python 使用Selenium抓取词汇表并解析到DataFrame

Python 使用Selenium抓取词汇表并解析到DataFrame,python,pandas,selenium,csv,web-scraping,Python,Pandas,Selenium,Csv,Web Scraping,有一个小程序,它进入一个词汇表,打印该页上的所有单词,然后点击按钮进入下一页,再次打印该页上的所有词汇表 我使用了一个循环来重复这个过程,并循环遍历分布在多个页面上的所有单词 #Create csv outfile = open("Vocab.csv","w",newline='') writer = csv.writer(outfile) #Define the dataframe df = pd.DataFrame(columns=['rating

有一个小程序,它进入一个词汇表,打印该页上的所有单词,然后点击按钮进入下一页,再次打印该页上的所有词汇表

我使用了一个循环来重复这个过程,并循环遍历分布在多个页面上的所有单词

#Create csv
outfile = open("Vocab.csv","w",newline='')
writer = csv.writer(outfile)


#Define the dataframe
df = pd.DataFrame(columns=['rating'])



PATH="C:\Program Files (x86)\chromedriver.exe"
driver= webdriver.Chrome(PATH)


driver.get("https://sq.m.wiktionary.org/w/index.php?title=Kategoria:Shqip&pagefrom=agall%C3%ABk#mw-pages")


for x in range(3):
        rating_element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "#mw-pages > div > div > div > ul"))
        )
        rating=rating_element.text
        print(rating)
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.LINK_TEXT, "faqja pasardhëse"))
        )
        element.click() 
        
        
        df2 = pd.DataFrame([rating],columns=['rating'])  
        df = df.append(df2,ignore_index=True)


代码本身工作得非常好,但是当我试图实现将所有数据解析为数据帧的功能时,我只得到一个空的Csv文件。我试图只在一列中添加数千个单词。

您可以迭代每个单词以附加到列中:

从selenium导入webdriver
从selenium.webdriver.common.by导入
从selenium.webdriver.support.ui导入WebDriverWait
从selenium.webdriver.support将预期的_条件导入为EC
导入selenium.common.exceptions
导入操作系统
作为pd进口熊猫
chrome\u options=webdriver.ChromeOptions()
chrome_选项。添加_参数(“--window size=1920x1080”)
#chrome\u选项。添加\u参数(“--headless”)
chrome\u driver=os.getcwd()+“\\chromedriver.exe”
driver=webdriver.Chrome(选项=Chrome\u选项,可执行路径=Chrome\u驱动程序)
#定义数据帧
df=pd.DataFrame(列=['rating'])
驱动程序。获取(“https://sq.m.wiktionary.org/w/index.php?title=Kategoria:Shqip&pagefrom=agall%C3%ABk#mw-页数)
对于范围(200)内的x:
rating_element=WebDriverWait(驱动程序,10)。直到(
EC.元素的存在位置((By.CSS_选择器,“#mw pages>div>div>div>ul”))
)
rating=rating_element.text
对于rating.split('\n')中的单词:
df2=pd.DataFrame([word],列=['rating']))
df=df.append(df2,忽略索引=True)
尝试:
元素=WebDriverWait(驱动程序,10)。直到(
EC.元素的存在位置((By.LINK_文本,“faqja pasardhëse”))
)
元素。单击()
除selenium.common.Exception.TimeoutException外:
打破
打印(df)
df.to_csv('word_list.csv',encoding='utf-8',index=False)
输出 编辑
添加了写入文件的选项。

其余选项未更改,但我将对其进行编辑,因为我似乎收到以下错误“”“”WebDriverException:“chromedriver.exe”可执行文件需要位于路径中。请查看“”,即使我给出了正确的路径请尝试按如下方式传递您的路径:
path=r“C:\Program Files(x86)\chromedriver.exe”
忽略转义码。如果您正在使用我的代码,请不要忘记删除
os.getcwd()+
,问题是我必须循环200页,获取所有单词并将其解析到数据帧。当我在循环中写入200时,出现以下错误。这是在187次迭代之后发生的,因为没有更多的新页面可供查看,所以您无法找到下一个页面锚元素。有37490个单词,每页200个,所以我们只需要检查188页。
      rating
0    agallëk
1       agar
2      agave
3       agde
4     ageshë
..       ...
595    ankim
596  ankimor
597  ankohem
598    ankoj
599   ankojë

[600 rows x 1 columns]