質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

1731閲覧

urllibの410HTTPエラー回避方法について

kkk12

総合スコア15

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/03/28 20:53

現在10000件のURLリストからURLを取り出し、個別にサイト内のテキストをスクレイピングするプログラムをgoogleColabratory構築しています。2000件までは下記のpython1のコードでCSVファイルに書き出し迄できたのですが、10000件のURLではHTTP Error 410: Goneと表示されます。
やったこととしてはurllibでこのようなエラーが発生することが分かったためpython2のようなプログラムの作成を行いました。しかし、一つのサイトをひたすらスクレイピングする状態になってしまい上手く動作しません。どこをどの様に修正すれば宜しいでしょうか?ご教授よろしくお願いいたします。

python1

1import requests, bs4 2import codecs 3import re 4import csv 5import urllib 6import time 7import pickle 8import sys 9import lxml.html 10 11 12with open('***.csv',encoding="utf-8") as csv_file : 13 a_test = [] 14 for urllists in csv.reader(csv_file): 15 a_test.append(urllists[1]) 16 del a_test[0] 17urltitlelist = [] 18for url_list in a_test: 19 html = urllib.request.urlopen(url_list) 20 soup = bs4.BeautifulSoup(html, "html.parser") 21 title =soup.select('.container') 22 for item_elems in title: 23 text_elems = item_elems.text 24 urltitlelist.append({"urls": url_list,"text": text_elems, }) 25 print(text_elems) 26with open('textdata.csv', 'w', encoding='utf-8') as f: 27 fields = ["urls","text"] 28 29 writer = csv.DictWriter(f, fieldnames=fields, quoting=csv.QUOTE_NONNUMERIC) 30 writer.writeheader() # ヘッダー出力 31 writer.writerows(urltitlelist) # データ出力

python2

1import requests, bs4 2import codecs 3import re 4import csv 5import urllib 6import time 7import pickle 8import sys 9import lxml.html 10from urllib.request import Request, urlopen 11from urllib.error import URLError 12 13 14with open('***.csv',encoding="utf-8") as csv_file : 15 a_test = [] 16 for urllists in csv.reader(csv_file): 17 a_test.append(urllists[3]) 18 del a_test[0] 19urltitlelist = [] 20for url_list in a_test: 21 html = urllib.request.Request(url_list) 22 try: 23 response = urlopen(html) 24 except urllib.error.HTTPError as e: 25 print('raise HTTPError') 26 print(e.code) 27 print(e.reason) 28 except urllib.error.URLError as e: 29 rint('rase URLError') 30 print(e.reason) 31 else: 32 soup = bs4.BeautifulSoup(html, "html.parser") 33 title =soup.select('.container') 34 for item_elems in title: 35 text_elems = item_elems.text 36 urltitlelist.append({"urls": url_list,"text": text_elems, }) 37 print(text_elems) 38with open('textdata.csv', 'w', encoding='utf-8') as f: 39 # 列の出力順序を規定 40 fields = ["urls","text"] 41 42 writer = csv.DictWriter(f, fieldnames=fields, quoting=csv.QUOTE_NONNUMERIC) 43 writer.writeheader() # ヘッダー出力 44 writer.writerows(urltitlelist) # データ出力

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

具体的なエラーメッセージが、不明ですが...

410 Gone - MDN Web docs

HyperText Transfer Protocol (HTTP) の 410 Gone クライエントエラーレスポンスコードは、元のサーバーで利用できなくなっている対象リソースにアクセスしていることを示します。この状態は永久的です。

と説明にあるように 410 のエラーがでるのは、コンテンツを提供しているサーバー側に問題があります。

410 が発生している URL を確認して、その URL に Web ブラウザでアクセスするとどうなりますか?

Web ブラウザでアクセスしても 410 のエラーが出る場合は、存在しない URL でアクセスができない可能性が高いので URL のリストから取り除いてください。

Web ブラウザでは問題なくアクセスできる場合は、何らかのスクレイピング対策等が行われている可能性があります。

また、ローカルPC で、プログラムを実行すると取得できる場合は、そのサイトで、海外からのアクセスが禁止されていたりするのかもしれません。

投稿2020/03/30 22:30

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkk12

2020/04/06 09:51

tryで削除されたページのurlを飛ばし次のurlのスクレイピングをするようにしたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問