【问题标题】:Python Selenium - Individual table items into dataframe etcPython Selenium - 将单个表项放入数据框等
【发布时间】:2018-01-11 21:31:01
【问题描述】:

我是 Python 和 selenium 的新手,所以在这里无法提出解决方案:

我尝试从以下网站接收信息:“http://avi2.osamsterdam.nl/index.mpl

这个表应该被带入一个数据框(等等):table example 到目前为止,我的代码能够选择相应的邻域(buurt)并打开它的数据表。目标是稍后循环这个过程,但我可以自己做。

问题是,表格的格式很奇怪,这使得很难“抓取”变量。此外,我仍在困惑如何将数据放在一起,而不会弄乱信息。

有什么办法可以抓取这些物品(也许是一个例子)? 你会推荐我做什么,把它变成类似的格式(日期列标题,索引作为行名)?

这是我的代码:

website = "http://avi2.osamsterdam.nl/index.mpl"
driver.get(website) # runs webdriver 
buurt='//a[@class="expandable" and contains(text(),"Buurt")]'

area = driver.find_element_by_id("geo")
area.click()

#select buurt
option=men_menu = WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH, buurt)))
ActionChains(driver).move_to_element(option).perform()

buurten = driver.find_element_by_xpath('//*[@id="geo"]/li/ul/li[3]')
x = buurten.find_elements_by_tag_name("li")
opt_l = []  
for e in x:
    print (e.text)
    #opt_l.append(e.text)

x[1].click() # later repeat for all! 

# How to select indiviudal items and make sure it goes into dataframe?
# does not work as of here: 
table = driver.find_element_by_id("kenmerkoverzicht")
dates = table.find_elements_by_css_selector('/th')
for e in dates:
    print (e.text)

【问题讨论】:

标签: python selenium dataframe web-scraping


【解决方案1】:

就您现有的代码而言,您需要等待该表,并且它的内容在您可以对其进行大量操作之前变得可见(还要注意第 th 元素的正确 CSS_SELECTOR)。

    table = WebDriverWait(self.driver, 5).until(
        EC.visibility_of_element_located((By.ID, 'kenmerkoverzicht')))
    dates = WebDriverWait(table, 5).until(
        EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'th')))

然后您可以继续将行和单元格数据提取到您自己的数据框中。我喜欢@Dalvenjia 的想法,即使用 pandas 直接提取数据。

【讨论】:

  • 谢谢!我尝试了熊猫的想法pandaframe = pd.read_html(table,thousands=' ', header=0, index_col=0)[0],但收到以下错误消息:TypeError:无法读取'WebElement'类型的对象我需要以某种方式转换表格吗?网站网址也不起作用(导致空框)
  • 解决了!如果有人需要答案,请发表评论
  • 我的猜测是您在表格 webElement 上使用了 .innerHTML() 或 .outerHTML() 来将 html 传递给 pandas?
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2016-06-27
  • 2015-08-11
  • 2017-03-30
  • 2016-10-28
  • 2021-03-25
  • 1970-01-01
相关资源
最近更新 更多