我正在尝试几种方法来筛选公司的网站。它在防火墙后面,所以我不能在这里共享它。无论如何,除了一个例外,我一切都运转良好。我似乎无法获得我想要看到的详细程度。
我正在使用硒和这一行代码来从每个URL上的每个表中获取数据。
element = wd.find_element_by_id('dags')
因此,我引用该表,转储数据,并将所有内容写入文本文件。我可以获得一堆任务的分析结果,分析结果看起来像这样:
1 0 2 1 4 2
问题是,当我打开CSV文件时,会看到以下内容:
102142
因此,一切都聚集在一起。是否有更好的方法从Web表获取数据?我当时正在考虑提取TR元素和TD元素,但是我不确定这将如何工作。我可以在这里发布所有代码,如果有帮助的话。我只是想使事情保持简单。
答案 0 :(得分:1)
提供您的消息来源可以使您的问题更加清楚,但是如果我们要从Wikipedia表中抓取数据,请举一个例子:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
url = "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)"
driver.get(url)
WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.XPATH, """//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody""")))
rankings = driver.find_elements_by_xpath("""//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody/tr/td[1]""")
rankings = [x.text for x in rankings]
countries = driver.find_elements_by_xpath("""//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody/tr/td[2]""")
countries = [x.text for x in countries]
gdps = driver.find_elements_by_xpath("""//*[@id="mw-content-text"]/div/table[2]/tbody/tr[2]/td[1]/table/tbody/tr/td[3]""")
gdps = [x.text for x in gdps]
data = zip(rankings, countries, gdps)
print data[:10]
输出如下:
[(u' ', u' World[19]', u'79,865,481'), (u'1', u' United States', u'19,390,600'), (u'2', u' China[n 1]', u'12,014,610'), (u'3', u' Japan', u'4,872,135'), (u'4', u' Germany', u'3,684,816'), (u'5', u' United Kingdom', u'2,624,529'), (u'6', u' India', u'2,611,012'), (u'7', u' France', u'2,583,560'), (u'8', u' Brazil', u'2,054,969'), (u'9', u' Italy', u'1,937,894')]
一旦有了这样的数据结构,就可以很容易地以csv或其他形式的持久化编写。
让我知道是否有帮助。