私のデータ収集の速度に大きな影響を与えたこの不満足な問題に直面しています。私は、特定のスポーツのウェブサイトに合わせ、このカスタマイズされたWebスクラッパーを書いていると私は私のスクレーパーを呼び出して、ファイルからURLを読んで:URLLinks.txtでURLの差異が非常に小さいため、私のWebスクレーパーが散発的に失敗する
import re
from bs4 import BeautifulSoup
import html5lib
import socket
from PassesData import *
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
base: http://www.something.com
with open('Part2-PostIS-0430PM.txt', 'w') as f5:
with open('URLLinks.txt') as temp:
for url in temp:
f5.write(getData(base+url))
f5.write("\n")
サンプルデータ - > /何か/特徴/ 12345
クローラは、URLを1つずつ読み込んでクローラスパーシングに渡し、その結果を - >を使用して外側のテキストファイルに書き出しますが、次のようなわずかな違いでURLを読み取ると、
/someting/where/12345の代わりに12345、
私のクローラが失敗します:UnboundLocalError:割り当て前にローカル変数 'header'が参照されています:ヘッダーはheader = soup.h1.b.text.strip()のようにURLからスパースするページヘッダーです。印刷機能私が読んでいるURLの99%は完全に動作しますが、途中の1つのURLがプロセス全体を停止させてしまいます。たとえば、Google ChromeにURLを渡すと、不足している用語が自動的に修正され、私は "http://www.something.com/someting/wherein/12345"をChromeに渡すと問題なく/何か//12345を開きます。そして、ここで私はURLlinks.txtでその1つのURLを変更し、私のデータ収集に巨大な遅延を引き起こしている私のクローラを再度実行します。
これは、私が絶えずプロセスをベビーシットしなければならないので、これは大きな遅延を引き起こしました。
本当にありがとうございます。
私は再び私のクローラが完璧に動作することを強調しますが、小さな小さなためにする必要が
(彼らはちょうどウェブサイト私がスクラップ午前の作業をいけないので、urllibは、その他の方法を用いない)私はBeautifulSoup4とソケットを使用していますURLのバリエーション、/ this-is-a/link/to/this- is-a/link/toの代わりに12345/this-は/ link/to/12345であり、ブラウザは完全に理解していますが、最初のウェブサイト!
私を助けてください。ありがとうコミュニティ
ChromeがURLの「someting」を「何か」に自動的に変更する例を挙げてください。それはちょうどそうではないようです – Shane
クロムこれを与える:http://stackoverflow.com//questions/41051497/my-web-scraper-sporadically-due-very-small-difference-in-urls?noredirect=1#comment69311269_41051497 insted of :http://stackoverflow.com//questions/41051497/my-web-scraper-sporadically-fail-due-to-very-small-difference-in-urls?noredirect=1#comment69311269_41051497 通知に若干の違いがあります非常に小さい - >非常に小さいため DNSサーバーは、あなたが意味していたものを自動的に見つけ出し、正しいものを取得しますが、上記で提供したコードを使用すると、ごく小さな間違いでさえ許されません。 – Hesyzd
これはDNSサーバーとは関係ありません。それはあなたの "間違った" URLをその質問の正式なURLにリダイレクトすることで作業をしているstackoverflowサーバーです。質問IDが正しい限り、そのURLに必要な名前を使用することができ、これはstackoverflowで受け入れられます。私はあなたが掻いているウェブサイトが同じことをすると思います。また、あなたの仕事をするために '要求'を使って私の答えをチェックすることができます。 – Shane