python—为什么我不能在selenium中使用for循环来刮取类元素?

hgncfbus  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(424)

我正在尝试使用python编程语言和selenium来清理这个网站。在没有for循环的情况下,我能够轻松地刮取数据,但每当我使用for循环刮取元素时,我都会出错,我还尝试使用while循环和try-and-except,但没有任何帮助。这是我的python代码:

from logging import exception
from typing import Text
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
from selenium import webdriver 
PATH = "C:/ProgramData/Anaconda3/scripts/chromedriver.exe" #always keeps chromedriver.exe inside scripts to save hours of debugging
driver =webdriver.Chrome(PATH) #preety i,portant part
driver.get("https://www.gharghaderi.com/")
driver.implicitly_wait(10)
house = driver.find_elements_by_class_name('griddetails')
for x in house:
    driver.get(x)
print(x.text)

这就是我在使用for循环后经常遇到的错误

mtb9vblg

mtb9vblg1#

当你写这篇文章时:

for x in house:

这意味着,对于每x个内部列表。
您的房屋列表包含类的所有web元素 griddetails 在循环中你正在做什么

driver.get(x)

这意味着您想要打开每个web元素,这是错误的。
此外 get() 支持字符串格式的url。
相反,如果您只想打印详细信息,可以执行以下操作:

house = driver.find_elements_by_class_name('griddetails')
for x in house:
   print(x.text)

这会给你正确的输出。
样本输出:

रु. 2,50,00,000
Land: 0-4-0-4 Road: 12 ft
Chapali 2 Budhanilkantha, Kathmandu
Chandra Bahadur Karki
ID 472

更新1:

house_list = []
house = driver.find_elements_by_class_name('griddetails')
for x in house:
   house_list.append(x.text)
data = {
         'Details': house_list
        }
df = pd.DataFrame.from_dict(data)
df.to_csv('out.csv', index = 0)

进口:

import pandas as pd
vm0i2vca

vm0i2vca2#

您的错误表明驱动程序存在问题。在for循环(第19行)中获取(x)行。get()需要打开一个url。但是,我相信您可以通过类名griddetails传递html位。您需要的是html中的文本。
在循环内部,尝试打印x或x.text,然后查看x是什么。然后,您应该尝试找出如何提取所需的文本。img看起来像您想要的文本在span标记内。所以,试着看看那里,找到一种从那里提取文本的方法。对不起,我自己不能测试代码。

相关问题