【发布时间】:2016-02-11 12:47:09
【问题描述】:
我正在尝试从动态页面中抓取表格。在以下代码(需要 selenium)之后,我设法获取了 <table> 元素的内容。
我想将此表转换为 csv,我尝试了 2 件事,但都失败了:
-
pandas.read_html返回一个错误,说我没有安装 html5lib,但我安装了,事实上我可以毫无问题地导入它。 -
soup.find_all('tr')在我运行soup = BeautifulSoup(tablehtml)后返回错误'NoneType' object is not callable
这是我的代码:
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
import pandas as pd
main_url = "http://data.stats.gov.cn/english/easyquery.htm?cn=E0101"
driver = webdriver.Firefox()
driver.get(main_url)
time.sleep(7)
driver.find_element_by_partial_link_text("Industry").click()
time.sleep(7)
driver.find_element_by_partial_link_text("Main Economic Indicat").click()
time.sleep(6)
driver.find_element_by_id("mySelect_sj").click()
time.sleep(2)
driver.find_element_by_class_name("dtText").send_keys("last72")
time.sleep(3)
driver.find_element_by_class_name("dtTextBtn").click()
time.sleep(2)
table=driver.find_element_by_id("table_main")
tablehtml= table.get_attribute('innerHTML')
【问题讨论】:
-
tablehtml的输出是什么? -
粘贴时间过长。开头是这样的:
指标 2015 年 10 月 2015 年 9 月 2015 年 8 月 Jul 2011... 运行代码即可获得完整版(可能需要 pip install selenium ) 我用selenium和bs4测试了你的代码,没有遇到任何问题。不知何故,您的汤对象返回为 None。你的意思是你可以在我的汤对象上使用 find_all() ?是的。我所能推荐的就是在你调用任何东西之前检查'tablehtml'和'soup'。
标签: python selenium pandas web-scraping beautifulsoup