前提
Pythonにて、あるサイト上の検索結果をスクレイピングしています。
URLのパラメータの一部をテキストファイルから読み込んで、規則に沿って完成URLを生成し、順々にアクセスして結果を取得することができています。
本題
安全の為に、"res.raise_for_status()"を組み込んでいるのですが、一部のパラメータで生成されたURLは、サイト内では存在しないページである為、そこにあたると"HTTPError: 404"となり、スクレイピング動作が停止してしまいます。
"res.raise_for_status()"を消せば404が発生しても、無視して次のURLへのアクセスをしてくれるのですが、これだともし"HTTPError: 503"が出てサイトへのアクセス自体を弾かれてもスクレイピング動作が停止しない為、このままではいけないなと思っています。
実現したいこと
タイトルの通り、アクセスの結果が
・"HTTPError: 503"の場合は動作停止
・"HTTPError: 404"の時は動作続行
と、HTTPErrorの処理を分けたいです。
下記ソースコードに組み込みたいと思っています。
該当のソースコード
import requests, bs4 import csv import time import random def scrape(url, page_id_for_scrape, csv_writer): res = requests.get(url) res.raise_for_status() soup = bs4.BeautifulSoup(res.text, "html.parser") elems = soup.select ('CSSセレクタ') for elem in elems: print(elem.getText()) csv_writer.writerow([page_id_for_scrape]) csv_writer.writerows(elems) time.sleep(random.randrange(10, 20)) def main(f): writer = csv.writer(f) with open('IDリスト.txt') as f: page_id_list = [int(row) for row in f] for page_id in page_id_list: print(page_id) scrape(f'http://狙いのサイト={page_id}', page_id, writer) if __name__ == '__main__': with open('保存.csv', 'w', newline='', encoding='CP932', errors='ignore') as f: main(f)
試したこと
どうすればいいのか見当もつかないのでググりまくったのですが、半日Googleに問い続けても手掛かりさえつかめませんでした。
そもそも自分の考えている動作が、仕様上できるのかどうかさえ疑っています。
できるのかできないのか、できないのであれば代案などあれば教えてほしいです。
### 補足
ソースコード内の、CSSセレクタ、IDリスト、保存などの名称は質問用です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。