2016-03-24 19 views
0

私は、約50のウェブサイトを照会するリクエスト.getオペレーションでRequestsThrottlerを実装しようとしています。Requests.get接続がBeautifulSoupで正しく動作していない

https://pypi.python.org/pypi/RequestsThrottler/0.2.2

RequestsThrottler前にコード(作品):私は渡していないよので

secondCrawlRequest = requests.get(row[6],headers=http_headers, timeout=5) 
raw_html = secondCrawlRequest.text 
SoupParser = BeautifulSoup(raw_html, 'html.parser') 
results = SoupParser.find('div', attrs={'style':'padding-left:10px;width:98%'}) 

for para in results.findAll('p'): 
    para_text = para.text.strip() 
    list_of_paras.append(para_text) 

RequestsThrottlerしたコードは、コードが失敗した

with BaseThrottler(name='base-throttler', delay=1.5) as bt: 
    secondCrawlRequest = requests.get(row[6],headers=http_headers, timeout=5) 
    reqs = [secondCrawlRequest for i in range(0, 5)] 
    throttled_requests = bt.multi_submit(reqs) 
    # where does responses get passed too? 
    responses = [tr.response for tr in throttled_requests] 
    raw_html = secondCrawlRequest.text 
    SoupParser = BeautifulSoup(raw_html, 'html.parser') 
    results = SoupParser.find('div', attrs={'style':'padding-left:10px;width:98%'}) 
for para in results.findAll('p'): 
    para_text = para.text.strip() 
    list_of_paras.append(para_text) 

(失敗した)を追加'respond'パラメータが正しく設定されています。

私のエラーはこれです:

ファイル "/ユーザ/ helloworldに/ Pythonのプロジェクト/ハーベスター - web01_harvester.py" results.findAllにおけるパラため では、ライン264、( 'P'): NameError:名前 'results'が定義されていません

「応答」パラメータを正しく渡すにはどうすればよいですか?

+0

[最小、完全で、かつ確認可能な例](http://stackoverflow.com/help/mcve)をご覧ください。あなたが示したコードではインデントエラーですが、それが修正されていれば、記述したエラーは発生しません。そのコードのコメントについて: 'respond'はどこにも使われていません。少なくともコードには表示されません。 – BlackJack

+0

私は自分の投稿にインデントエラーを修正しました。 RequestsThrottlerを追加する前に動作するコードとRequestsThrottlerを追加した後に動作しないコードを掲載しました。 –

+0

これは、 'BaseThrottler'コンテキストマネージャが' with'で発生した例外を抑制した場合にのみ発生します。 'result'への代入に達していないので、' secondCrawlRequest'という名前は、 'Request'インスタンスではなく、レスポンスインスタンスです。リンク先のPyPIページのサンプルコードと比較してください。 – BlackJack

答えて

0

スロットルをすべての要求の「上」に置かなければならないので、動作しているが調整されていないコードの周りにはループがあると仮定します。

paragraphs = list() 
with BaseThrottler(delay=1.5) as throttler: 
    throttled_requests = throttler.multi_submit(
     [ 
      requests.Request(row[6], headers=http_headers, timeout=5) 
      for row in rows 
     ] 
    ) 

for request in throttled_requests: 
    soup = BeautifulSoup(request.get_response().text, 'html.parser') 
    div = soup.find('div', attrs={'style': 'padding-left:10px;width:98%'}) 
    for paragraph in div.find_all('p'): 
     paragraphs.append(paragraph.text.strip()) 
+0

コードをありがとう私はこのエラーを生成したtryブロック内に追加しようとしました:トレースバック(最新の呼び出しの最後): ファイル "/ユーザ/ helloworldに/ Pythonのプロジェクト/ハーベスター - web01_harvester.py" throttled_requests要求に対する では、ライン290、: NameError:名 'throttled_requestsは' –

+0

定義されていないこと'BaseThrottler'インスタンスがコンテキストマネージャーとして静かに「スワロー」例外を使用した場合にのみ起こります。どちらがバグでしょうか。これを 'BaseThrottler'の作者に持ち込んでください。 – BlackJack

+0

ありがとう、私はそれらに連絡します。 –

関連する問題