2016-09-13 9 views
0

オーケー要求に私のコードです:は、ここでは、

from lxml import html 
from lxml import etree 
from selenium import webdriver 
import calendar 
import math 
import urllib 
import progressbar 
import requests 

使用セレン

path_to_driver = '/home/vladislav/Shit/geckodriver' 
browser = webdriver.Firefox(executable_path = path_to_driver) 

私はデータを保存する辞書を作成し、進捗バー

を作成します
DataDict = {} 
barY = progressbar.ProgressBar(max_value=progressbar.UnknownLength) 
barM = progressbar.ProgressBar(max_value=progressbar.UnknownLength) 
barW = progressbar.ProgressBar(max_value=progressbar.UnknownLength) 

は、ループ内のパラメータを形成するそれらからURLを構築し、

for year in (range(2014,2016)): 
     barY.update(year) 
     for month in range(1,13): 
      barM.update(month) 
      weeks = math.ceil(calendar.monthrange(year,month)[1]/4) 
      for week in range(weeks): 
       barW.update(week) 
       if (week > 2): 
        start_day = 22 
        end_day = calendar.monthrange(year,month)[1] 
       else: 
        start_day =7*week + 1 
        end_day = 7*(week + 1) 
       start_date = str(year) + '-' + str(month).zfill(2) +'-' + str(start_day).zfill(2) 
       end_date = str(year) + '-' +str(month).zfill(2) + '-' + str(end_day).zfill(2) 
       params = {'end-date': end_date, 'start-date': start_date} 
       url = 'http://www.finam.ru/profile/moex-akcii/aeroflot/news' 
       url = url + ('&' if urllib.parse.urlparse(url).query else '?') + urllib.parse.urlencode(params) 

browser.get要求要求自体

  browser.get(url) 

       try: 
        news_list = browser.find_element_by_class_name('news-list') 
        news_list_text = news_list.text 
        news_list_text = news_list_text.split('\n') 
        for i in range(int(len(news_list_text)/2)): 
         DataDict.update({news_list_text[2*i]:news_list_text[2*i+1]}) 
        print("Found! Adding news to the dictionary!") 
       except: 
        pass 

を送信しかし、2-4の要求後に、それだけでフリーズ:(

をどうしたの? enter image description here

答えて

0

問題は、いくつかの要求の後に現れた広告バナーにありました。解決策は、バナーが無効になるまで待つだけであり(time.sleep)、再度送信リクエストを送信します。:

try: 
       browser.get(url) 
       try: 
        news_list = browser.find_element_by_class_name('news-list') 
        news_list_text = news_list.text 
        news_list_text = news_list_text.split('\n') 
        for i in range(int(len(news_list_text)/2)): 
         DataDict.update({news_list_text[2*i]:news_list_text[2*i+1]}) 
        #print("Found! Adding news to the dictionary!") 
       except: 
        pass 
       time.sleep(10) 
      except: 
       print("perchaps this shitty AD?") 
       try: 
        news_list = browser.find_element_by_class_name('news-list') 
        news_list_text = news_list.text 
        news_list_text = news_list_text.split('\n') 
        for i in range(int(len(news_list_text)/2)): 
         DataDict.update({news_list_text[2*i]:news_list_text[2*i+1]}) 
        #print("Found! Adding news to the dictionary!") 
       except: 
        pass