使用硒和PhantomJS刮擦表

时间:2016-11-09 12:51:16

标签: python selenium web-scraping phantomjs

我想抓下桌子:

enter image description here

当我使用Chrome网络驱动程序时,我的代码正在运行,但是当使用PhantomJS驱动程序时,输出似乎没有获取数字,它只获取文本。

enter image description here

我的Python代码是这样的:

    from selenium import webdriver

path_to_chromedriver = '/Users/amr_f/Desktop/chromedriver' # change path as needed
browser = webdriver.PhantomJS('/home/ubuntu/phantomjs-2.1.1-linux-x86_64/bin/phantomjs')
url = 'http://www.cibeg.com/English/Pages/default.aspx'
browser.get(url)

browser.find_element_by_xpath('//*[@id="sliderHome"]/div[2]/div/ul/li[3]/a').click()

data = []

for tr in browser.find_elements_by_xpath('//*[@id="divCurrTableContainer"]/table'):
    tds = tr.find_elements_by_tag_name('td')
    if tds: 

        data.append([td.text for td in tds])
print(data)

1 个答案:

答案 0 :(得分:2)

通过添加browser.set_window_size(1124, 850)来设置PhantomJS驱动程序的窗口大小,我能够从页面中检索表的数据。

如果我正确地回忆起这种情况会发生这种情况,因为某些javascript库使用窗口大小“on load”。没有window size参数会导致例程无法正确加载页面上的所有元素。

from selenium import webdriver


browser = webdriver.PhantomJS('/home/ubuntu/phantomjs-2.1.1-linux-x86_64/bin/phantomjs')
browser.set_window_size(1124, 850)
url = 'http://www.cibeg.com/English/Pages/default.aspx'
browser.get(url)    
browser.find_element_by_xpath('//*[@id="sliderHome"]/div[2]/div/ul/li[3]/a').click()    
data = []

for tr in browser.find_elements_by_xpath('//*[@id="divCurrTableContainer"]/table'):
    tds = tr.find_elements_by_tag_name('td')
    if tds:     
        data.append([td.text for td in tds])

print(data)

添加窗口大小后,我能够检索:

[['USD', '16.26', '16.75', 'EUR', '17.6696', '18.3563', 'GBP', '20.0895', '20.8621', 'CHF', '16.4571', '17.0536', 'SAR', '4.3297', '4.4663', 'KWD', '53.5202', '55.3353']]