2017-02-08 3 views
0

私は既にこのウェブサイトからURLを引き出すために数行のコードを書いています。 http://www.worldhospitaldirectory.com/United%20States/hospitalsPythonとSelenium:私はページ間のWebスクレイピングを自動化しています。 [次へ]ボタンでどのようにループできますか?

コードは以下の通りです:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
import time 
import csv 

driver = webdriver.Firefox() 
driver.get('http://www.worldhospitaldirectory.com/United%20States/hospitals') 
url  = [] 
pagenbr = 1 

while pagenbr <= 115: 
    current = driver.current_url 
    driver.get(current) 
    lks = driver.find_elements_by_xpath('//*[@href]') 
    for ii in lks: 
     link = ii.get_attribute('href') 
     if '/info' in link: 
      url.append(link) 

    print('page ' + str(pagenbr) + ' is done.') 
    if pagenbr <=114: 
     elm = driver.find_element_by_link_text('Next') 
     driver.implicitly_wait(10) 
     elm.click() 
     time.sleep(2) 
    pagenbr += 1 

ls = list(set(url)) 
with open('US_GeneralHospital.csv', 'wb') as myfile: 
    wr = csv.writer(myfile,quoting=csv.QUOTE_ALL) 
    for u in ls: 
     wr.writerow([u]) 

そしてそれは、このウェブサイトから、個々のリンクを引っ張るために非常によく働きました。 しかし、問題は毎回自分でループする必要のあるページ番号を変更する必要があることです。

私は、このコードを必要な時間を計算することによって反復するようにアップグレードしたいと考えています。手動で入力する必要はありません。

ありがとうございました。

+0

1.あなたのコードは115ページのものを取得するつもりはなく、114で終了するとwhileループを終了する 'pagenbr == 115'を行います。 2. whileループではなく、forループを使用してください。 'for range(1,116): 'の場合は' for pagenbr for'です。あなたが求めているものは完全に明確ではありません。 – TehTris

答えて

0

スクリプトのページ数をハードコードするのは悪い考えです。それが有効になっている間、「次へ」ボタンをクリックするだけで試してみてください。

from selenium.common.exceptions import NoSuchElementException 

while True: 
    try: 
     # do whatever you need to do on page 
     driver.find_element_by_xpath('//li[not(@class="disabled")]/span[text()="Next"]').click() 
    except NoSuchElementException: 
     break 

最後のページには、ラインcurrent = driver.current_urldriver.get(current)を使用すると、まったく意味がないことに注意してください

に到達するまで、これはあなたがページスクレイピングを実行できるようにする必要がありますしたがって、あなたはそれらをスキップするかもしれません

+0

こんにちはAnderson、あなたは私の人です。私を助けてくれてありがとう –

関連する問題