やりたいこと
規則性のあるサイトのurlを変更してそれぞれのurlの表を読み込みたいと思っております。
たとえば、
url = 'https://www.sss'+str(i)+'ccc'+str(n)+'aaa'
というurlがあったとしたときに
iは1〜12まで
nは1〜12までの
数字がかわり、144のサイトに読み込み、
この各サイトの表を読み込むプログラムをpythonで書きたいと考えております。
そこで下記のように書きました。
python
1from bs4 import BeautifulSoup 2import requests 3import pandas as pd 4from pandas import Series,DataFrame 5import time 6Round=range(1,13) 7NI=[] 8NF=[] 9for i in Round: 10 time.sleep(2) 11 url = 'https://www.sss'+str(i)+'ccc'+str(n)+'aaa' 12result = requests.get(url) 13c = result.content 14soup = BeautifulSoup(c,'lxml') 15summary = soup.find('div',{'class':'contentsFrame1_inner'}) 16table = summary.find_all('table') 17 18rows = table[1].find_all('tr') 19for tr in rows: 20 cols = tr.find_all('div',{'class':'is-fs11'}) 21 for td in cols: 22 text = td.find(text=True) 23 NF.append(text)
上記では、すべてのfor文を終えた後に、urlを読み込むので、
最後の
url = https://www.sss12ccc12aaa
の表しかスクレイピングできていない状況です。
教えていただきたいこと
1.for文の基本について
上記の方法で書いた場合には、すべてのループが終了した後にurlを読み込みます。
そのため、1つのurl
(例えば、https://www.sss1ccc1aaaのリストへの追加が終わったら、
https://www.sss1ccc2aaaの処理を行う。)
を読み終えた後に次の処理を行うにはどのようにすればよろしいでしょうか?
また、上記ではtime関数を使用しておりますが、単にurlを2秒おきに表示するのみで
1回サイトにアクセスするたびに間隔をあけるような書き方になっていないように思います。
2.読み込んだ先のurlテーブルがなかった時の処理の方法
コード中に示しております、
table = summary.find_all('table')
でサイトの表を引っ張ってきますが、
urlがなかった時には、次のサイトに行く処理の方法を教えていただけますか?
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/08 13:18
2018/08/08 13:22