【问题标题】:Selenium scraped data to pandas dataframeSelenium 将数据抓取到 pandas 数据框
【发布时间】:2019-05-16 05:14:01
【问题描述】:

这是我第一次尝试用硒刮。

我收集了我想要的东西,但我想将它传递给 pandas 数据框以便进行一些计算。

下面的示例代码是我获取数据的方式;

(为财务数据,[2]、[3]分别代表年份(2016、2017))

nf1 = driver.find_element_by_xpath('//*[@id="tbodyMTablo"]/tr[84]/td[2]').text
nf2 = driver.find_element_by_xpath('//*[@id="tbodyMTablo"]/tr[84]/td[3]').text

do_v1 = driver.find_element_by_xpath('//*[@id="tbodyMTablo"]/tr[2]/td[2]').text
do_v2 = driver.find_element_by_xpath('//*[@id="tbodyMTablo"]/tr[2]/td[3]').text

kvb_1 = driver.find_element_by_xpath('//*[@id="tbodyMTablo"]/tr[29]/td[2]').text
kvb_2 = driver.find_element_by_xpath('//*[@id="tbodyMTablo"]/tr[29]/td[3]').text

这是一个数字数据,但存储为 str(可能是因为 .text)和 int(nf2)float(nf2)不起作用。

有什么方法可以首先存储为值吗? (没有.text它返回0)

抓取数值数据并将其存储在数据框中的正确方法是什么?

提前致谢。

【问题讨论】:

  • 在您的方法返回的 WebElement 的 .text 属性上调用 float() 或 int()。

标签: python pandas selenium web-scraping


【解决方案1】:

尝试使用 .get_attribute('innerHTML') 代替 .text


编辑*


您似乎正在尝试将 selenium 对象转换为 int()。但是 int 需要一个字符串来转换(只包含数字)。

所以,你可以尝试这样转换。

“这个例子是关于在 Wikipedia 上的一个随机页面上的一个字段中抓取一个数字;尝试使其适应您的代码。”

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://it.wikipedia.org/wiki/Internet#Nascita_del_World_Wide_Web_.281991.29')

scraped = driver.find_element_by_xpath('//span[@class="tocnumber" and contains(text(), "1")]')

print(int(scraped.get_attribute('innerHTML')))

driver.quit()

【讨论】:

  • 它给出相同的结果(存储为str)
  • nf1 和 nf2 中的值只包含数字还是包含字母?在将其转换为 int() 之前,您是否尝试过 strip()?例如:int(nf1.strip())
  • 只有数字,我得到这个错误; ValueError: int() 以 10 为底的无效文字:'-7.402.508'
  • 能否请您链接您试图从中抓取的页面,所以也许我可以提供更好的帮助。
  • 你好,我通过刷新解决了这个问题,可能我试图在加载之前将其废弃。
猜你喜欢
  • 2018-01-22
  • 2020-09-16
  • 1970-01-01
  • 2022-01-04
  • 2018-10-31
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多