2017-05-03 6 views
0

私は3000以上のウェブサイトをパイソンで美味しいものに削り取ろうとしています。私のコードは約50のウェブサイトで働いていましたが、同時に1000または3000+を実行するとスタックになるでしょう。素敵なスープを使ったテキストのスクラップ - なぜバルクアドレスが機能しないのですか

コードが複数のWebサイトでは機能しないことは間違いですが、私はこれをトラブルシューティングする方法についていくつかアドバイスを受けたいと思います。これは正常ですか、それとも別の方法ですか?

私が1000を実行すると、6時間か7時間後でも結果が返ってこないので、コードがまったく動作していないと思われます。私はいくつかのコメントをしたいと思います。

コード: は、(1)コードが期待するものではないデータを持っているあなたのリスト内のリンクがあります:

import csv 
d = csv.DictReader(open('file.csv', 'rU')) 

soc = [] 
for row in d: 
    soc.append(row) 

import sys 
reload(sys) 
sys.setdefaultencoding('utf8') 

from bs4 import * 
import time 
import requests 
import urllib2 

# create lists 
mega = [] 
mega2 = [] 
mega3 = [] 


for i in range(len(soc)): # all links, about 3000 
    myurl = soc[i]['report_url'] 
    try: 
     html = urllib2.urlopen(myurl).read() 
    except urllib2.HTTPError, error: 
     continue 
    except urllib2.URLError, error: 
     continue 
    soup = BeautifulSoup(html, "html.parser") 
    row = soup.findAll('tr') 
    for r in row: 
     mega.append([r.get_text()]) # force all raw text into a list in list 
     mega2 = [x[0] for x in mega] 
    mega3.append(mega2) 
    time.sleep(2) 
+0

IPSまたはそのCDN /ファイアウォールによってブロックされているかどうかを確認しましたか? – VMRuiz

+0

いくつかの印刷ステートメントを追加して、どこに詰まっているかを確認します。 1つの方法は、各行の間に1つずつ追加し、1から出力するようにすることです。 – Lexxxxx

+0

@Lexxxxxもっと具体的になりますか?どうやってスタックされた場所を印刷するようにPythonに指示できますか? – song0089

答えて

0

あなたのコードが50社のウェブサイトのために働く場合は、2つの可能性があります。 (2)リソースが不足しています。 プログラムはスキャンしようとしているリンクとタイムスタンプを報告します。 出力が停止すると、最後のリンクが問題になります。タイムスタンプがさらに離れていくと、リソースが問題になります。

+0

私はリンクとタイムスタンプを印刷する方法を見つけました、それは掻き取りのおおよその時間が5秒と思われます。 – song0089

+0

時間がかかりすぎるとコードを強制的に停止させる方法はありますか?例えば、私はリンクのために時間が15秒以上かかる場合、私は何かを追加することができます。 – song0089

+0

urlopen()でタイムアウトを設定できます。 'html = urllib2.urlopen(myurl、timeout = 5).read()' – Lexxxxx

関連する問題