現在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) # データ出力
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/06 09:51