2017-07-26 13 views
0

Python 2.7でセレンを使ってWebサイトからいくつかのWebスクレイピングをしたい、ちょっと待ってからブラウザを閉じてgeckodriver.exeを閉じてください。何百万ものブラウザページを開きたくないからです。 exeファイル)Pythonでセレンを使って新しいWebページを開く方法(古いものを閉じる)

私はこれを行う方法はありますか?

コメントと私のコード:

from bs4 import BeautifulSoup 
 
from selenium import webdriver 
 
import time 
 
import urllib2 
 
import unicodecsv as csv 
 
import os 
 
import sys 
 
import io 
 
import time 
 
import datetime 
 
import pandas as pd 
 
from bs4 import BeautifulSoup 
 
import MySQLdb 
 
import re 
 
import contextlib 
 
import selenium.webdriver.support.ui as ui 
 

 
#I am create a new csv file 
 
filename=r'output.csv' 
 

 
resultcsv=open(filename,"wb") 
 
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1') 
 

 
#I am opening the website with selenium (js website) 
 
profile=webdriver.FirefoxProfile() 
 
profile.set_preference("intl.accept_languages","en-us") 
 
driver = webdriver.Firefox(firefox_profile=profile) 
 
driver.get("https://www.flightradar24.com/data/airports/bud/arrivals") 
 
time.sleep(10) 
 
html_source=driver.page_source 
 
soup=BeautifulSoup(html_source,"html.parser") 
 
print soup 
 

 
#HERE I AM WEBSCRAPING THE INFORMATIONS WHAT I NEEDED AND 
 
#AFTER I AM WRITING IT INTO THIS CSV FILE. 
 
    
 
output.writerows(datatable) 
 
    
 
resultcsv.close() 
 

 
#AND MY QUESTION START HERE. I WANT TO CLOSE THIS SESSEION, 
 
#WAIT A LITTLE, FOR EXAMPLE 10 SEC, BECAUSE IT IS NEEDED SOME TIME TO WEB- 
 
#SCRAPING DATAES AFTER THIS CLOSE THE GECKODRIVER + FIREFOX, AND AFTER 
 
#REPEAT THIS CODE WITH A NEW WEBSITE. IS IT POSSIBLE?

更新コード - nutmeg64

私は、このエラーメッセージが出ます:

File "C:/Python27/air17.py", line 43, in scrape(urls) File "C:/Python27/air17.py", line 28, in scrape table = soup.find('table', { "class" : "table table-condensed table-hover data-table m-n-t-15" }) NameError: global name 'soup' is not defined

from bs4 import BeautifulSoup 
 
from selenium import webdriver 
 
import time 
 
import urllib2 
 
import unicodecsv as csv 
 
import os 
 
import sys 
 
import io 
 
import time 
 
import datetime 
 
import pandas as pd 
 
from bs4 import BeautifulSoup 
 
import MySQLdb 
 
import re 
 
import contextlib 
 
import selenium.webdriver.support.ui as ui 
 

 
filename=r'output.csv' 
 

 
resultcsv=open(filename,"wb") 
 
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1') 
 

 
def scrape(urls): 
 
    browser = webdriver.Firefox() 
 
    for url in urls: 
 
     browser.get(url) 
 
     html = browser.page_source 
 
     soup=BeautifulSoup(html,"html.parser") 
 
     table = soup.find('table', { "class" : "table table-condensed table-hover data-table m-n-t-15" }) 
 
     datatable=[] 
 
     for record in table.find_all('tr', class_="hidden-xs hidden-sm ng-scope"): 
 
      temp_data = [] 
 
      for data in record.find_all("td"): 
 
       temp_data.append(data.text.encode('latin-1')) 
 
      datatable.append(temp_data) 
 
    
 
     output.writerows(datatable) 
 
    
 
     resultcsv.close() 
 
     time.sleep(10) 
 
     browser.quit() 
 

 
urls = ["https://www.flightradar24.com/data/airports/bud/arrivals", "https://www.flightradar24.com/data/airports/fco/arrivals"] 
 
scrape(urls) 
 

+0

それは非常に簡単です。 2つの選択肢があります:1:ブラウザを閉じてから新しいブラウザを起動します。 2:既存のドライバを使用して新しいページに移動します。それは本当に簡単です。あなたの問題は何ですか? – Buaban

+0

問題は、プログラミングの世界では初心者ですが、私はスキルを開発しようとしています^^ ソリューション1の場合:resultcsv.close()の後に、これを書く必要があります:browser.quit()とブラウザ.get(www.google.hu)?それはすべてですか? 2.ソリューションのサウンドが良く、終了するブラウザは不要なものですが、既存のドライバを使用して新しいページに移動するにはどうすればよいですか? – tardos93

答えて

0

これはセレンの一部を関数に入れ、別のURLで呼び出すことができます。反復の間に10秒間スリープします。

これは理想的な解決策ではありません。一度セレンを開くだけで、ソースを読んでからbrowser.get(new_url)を実行するだけです。すべての掻き取りが完了したら、browser.quit()を解放してください。例えば

(非常に非常に単純化された):

def scrape(urls): 
    browser = webdriver.Firefox() 
    for url in urls: 
     browser.get(url) 
     html = browser.page_source 
     # scrape the html as you like 
     # create a csv file for that specific url 
     # write results to csv and close it 
     time.sleep(10) # <-- not really necessary. scraping and writing to csv is a long enough break 
    browser.quit() 

urls = ["http://example.com", "http://notarealwebsite.co.uk", "http://lastwebpagetoscrape.com" ] 
scrape(urls) 
+0

私は約10の別のウェブサイトを持っている、それはセレンを閉じて、再び開くために、この方法を選んだ理由です。しかし、あなたの提案はより簡単に聞こえます。だからresultcsv.close()の後私はこれを書く必要があります:browser.quit()とbrowser.get(www.google.hu)? – tardos93

+0

番号。あなたがするためにもっと掻き分けている場合は、ブラウザを終了しないでください。これらが異なるURLであることは重要ではありません。私は答えに例を追加します。 – nutmeg64

+0

私はあなたの例をチェックしましたが、私のコードでどの部分を削除しなければならないのですか?ウェブスクレイピング部分はhtml = browserの下にあります...? – tardos93

関連する問題