2016-04-02 10 views
0

BS4で小さなウェブスクレーパーを作成しました。コードを1ページずつスクラップできます。範囲ループがウェブスクレイプで機能しない

import csv 
from bs4 import BeautifulSoup 
import requests 
html = requests.get("http://www.gbgb.org.uk/resultsMeeting.aspx?id=129867").text 
soup = BeautifulSoup(html,'lxml') 

このコードは、1つのページを削るが、私は時間(範囲)に複数のページをこすりしたいので、私はこのようなループのためにこれを追加してみました。

import csv 
from bs4 import BeautifulSoup 
import requests 

for ace in range(129867, 129869): 

html = requests.get("http://www.gbgb.org.uk/resultsMeeting.aspx?id= {ace}").text 

soup = BeautifulSoup(html,'lxml') 

私は、コードを実行し、私もそれが構文もwrong.Could行きました何を示唆いつも不可解なメッセージまでのいずれかを取得しない、またはそれはelse.Anyヘルプは感謝何かのときは何も起こりません。

+0

あなたのコードでは、forループの内側か外側にある最後の 'soup = BeautifulSoup(html、 'lxml')ですか?つまり、インデントされているかどうかにかかわらず、それはあなたの質問にあるようには見えません。 – snakecharmerb

答えて

1

ループ内のすべてを行う必要があります。また、URLにaceの値を挿入していないため、id=の後ろに余分なスペースがあります。 web-scraping sessionを設定し、get()メソッドのparamsキーワードを使用することも良い考えです。

固定バージョン:

import csv 
from bs4 import BeautifulSoup 
import requests 

with requests.Session() as session: 
    for ace in range(129867, 129869): 
     url = "http://www.gbgb.org.uk/resultsMeeting.aspx" 
     html = session.get(url, params={'id': ace}).text 
     soup = BeautifulSoup(html, 'lxml') 

(注)このコードは、ブロッキング性質のままで、一度にページ1を処理します。高速化したい場合は、Scrapy Web-Scrapingフレームワークを参照してください。

+0

こんにちはAlecxeさん、お返事ありがとうございます。大括弧内に2つのURL番号がありますが、実行すると1つのページしか表示されません。あなたが言いましたようにURL番号の1つだけが有効になります。私はVBとVBAから移行しましたが、範囲内の "TO"キーワードを使用していましたが、BSは多くのことをしているようです.PSは治療を見るようになりましたが、それ自体が主要なプロジェクトです。 – moonshadow

+0

@ moonshadow大丈夫、更新されました、今は動作しますか?ありがとう。 – alecxe

+0

こんにちはAlecxe.Manyありがとうございますが、それは1つの完全な会議(範囲の最初)をもたらす一方で、それは破損したデータを含む範囲外の会議を作り出すことによって少しオフトラックになります。 – moonshadow

関連する問題