質問するログイン新規登録

Q&A

1回答

2259閲覧

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

0

0

現在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

回答の取得に失敗しました

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問