次のURLリンクに移動する必要があります(各ページには抽出する必要がある行が約20行あり、次の結果に次の結果を追加する必要があります)。次のURL)。複数のページをループしてデータをスクラップすることができません
約360のURLがあり、それらをすべて実行してデータを抽出したいと考えています。私のコードは以下の通りです。後でCSVファイルに書きたいと思います。私がPythonに慣れていないので、どんな提案も高く評価されます。
from urlparse import urljoin
import requests
from bs4 import BeautifulSoup
import csv
base_url = 'http://cricket.inhs.uiuc.edu/edwipweb/FMPro?-db=nvpassoc.fp5&-format=nvp_search_results.htm&-lay=web%20form&-max=20&-findall='
list_of_rows = []
next_page = 'http://cricket.inhs.uiuc.edu/edwipweb/FMPro?-db=nvpassoc.fp5&-format=nvp_search_results.htm&-lay=web%20form&-max=20&-skip=20&-findall='
while True:
soup = BeautifulSoup(requests.get(next_page).content)
soup.findAll('table')[1].findAll('tr')
for row in soup.findAll('table')[1].findAll('tr'):
list_of_cells = []
for cell in row.findAll('p'):
text = cell.text.replace(' ','')
list_of_cells.append(text)
list_of_rows.append(list_of_cells)
try:
next_page = urljoin(base_url, soup.select('/FMPro?-db=nvpassoc.fp5&-format=nvp_search_results.htm&-lay=web%20form&-max=20&-skip=20&-findall=')[1].get('href'))
except IndexError:
break
print list_of_rows
outfile = open("./trialpage.csv","wb")
writer = csv.writer(outfile)
writer.writerows(list_of_rows)
whileループ内にtry/exceptブロックを置く必要があります。また、最大値とスキップ値を変更するたびにnext_pageを更新する必要があります。 –
whileループ内です。私が抱えている問題は、ページの最初の20行を印刷しているだけで、次のWebページに移動していないということです。 –
あなたのwhileループにはありません。 forループの下に移動してください –