From 79467a245beb11c1fa97e9056e5ad99c8feb2cc6 Mon Sep 17 00:00:00 2001 From: starek21 <starek21@vt.edu> Date: Thu, 18 Apr 2024 13:46:51 -0400 Subject: [PATCH] working version --- __pycache__/scraper.cpython-312.pyc | Bin 2450 -> 4208 bytes crisis_events.db | Bin 73728 -> 73728 bytes crisis_events_database_metadata.json | 2 +- flask_backend.py | 86 ++++++++++++++++++--------- scraper.py | 22 +++++++ 5 files changed, 80 insertions(+), 30 deletions(-) diff --git a/__pycache__/scraper.cpython-312.pyc b/__pycache__/scraper.cpython-312.pyc index 98f2a8fe0cb9814e7543b4291b1c61344efe2b16..f74863a53ea0e12effc8b81a5c15b218f1ef3cc2 100644 GIT binary patch delta 1511 zcmZuxT}&HC5Z>L}v(G-Ce`4d{fGMO+qbm)N3Q9#uTL@LC8X*Omq)=7J<ql%YfV+1t z6xp(?Rw|LGh<j4up${NM6)7*RD)qH0uT>=wd2kO$=}X@oh?I(ls<Q_3BV|wfd3I)Q zXYQLBe;X_}djC)qH-dF*xM@7+DR^t~{ldkbdJSnf=^k+tq*Gm9$J_;>5s&Uk)LA!h zu&`Jk^=huK(1=fS1Nt=?Fraw=&wP$mrSR)Duea40W3iMzYQ(1|lD|;=1HrbnF8rfJ zP8q(V-w?cSz2tlqKd^2%-v%r=uhiC@bkav>^iNW;37s`tkDaCKV}~hK@^SzQu=idA z?Gl<mS*+nKF^_yQNF(c{;)^;^R>%l_=;NCRWod>c1nW<HF2_X!FN8BVAs#rM#0;%+ zfRX8}T8_0@(R3YYMYBRFKUae?PljYfO^AR_qjP|B3WO&M0~I};%N?t3Q{+NW0C=je zLr`!(SP5@cI{wYz4AI2zNj1qK^dh>93_L?H8b%nNg{E0y7|meSF~H8ii;QQ&!W=>X zYL3|S=HPY1rXT3DrYhNVI;Bt9qG7Ul%67z3aMD;axZ3VG)YC9yQ)9YKwfLB6(}Xb% zzFK-RWvC8Y8jmOSsn{f#(=2J&QY@JqHQ`#Dato9BEe@s|>7;4!+BG&d=3uk)+z>h} z`y^Q7M^%3lOzp6ZRe(Gy%1XYk=nLfgOD<*p&a$xWsxKp#*s?;4q1s&}xmxD?iovr> zU4<^Id%n;11&jXBl3b9N`yTq6N|BZ|b34+0&ru3Sm&fmG4|BohVyJ$_vGUof_ovWS zW5-sgqtO31SFMFsm95aFLjRKhT>DIbC{IJk<6rE$+qG=2eYh2VeOvC_q@B-dz*Na% z-v~gOh1y<4__2ooZYW}J*m<gHDR@+xwwpJtwJF+Iw0?HPa;^c!i_LhQnUBK-4*bT0 z(gnH1tHxgDpaK}YCxJq~4rp{A(g+n`SHO6cd#wQgdA_<bLJfli&^JW#*UFTNZ6%+7 zF?~0E&yuAYELly`Rj2IBzyI%3pY^HKcB>Wr-Wu(#6E-}wH!N)UF_*(4;PbzVL8v8k zY6Nk$onbslmcXP5{J-R^P;FZnO86`oPm&Q5l-qJAXC+Kgh72K99C#iXs=zo2EXsj5 zwn}a3jyaj+4b5JuYFQIV1}FcREBTNs?#<o-(;)YG7r>K8r9i{->{@g?&}p?w9SY}U z4=hLxvWwPlQZHfc)_>9qIX)YVw`qm$$~6xV>){IC*ZWfU<g}Jf>Tj|4;0QHG#zz2U z0b{&_LObZ(W29~&^$}`&grYl0{>vfH_kTH^7s?Jq#IGY?L^kER6@BG)KC+E3Jt0AS gc~3y3rOc(>+BP4)uzOy?Z|pWG*uU2xVt*z2|Maw1&j0`b delta 247 zcmeyMFiDv2G%qg~0}!PAV@<PWpU5Y{*fmkzQG|&hl_iyHH6uuhfgy@Jl{-svVv9aE zZwhA%Llj>nqbAqH3-0Xf`o+mbi3OWg8J96J{+fJ-`6-(aL}VXJFB4<cWFK}NM$O5U z?Djx%C%dg6A6PauzC1OlATd3)NMkY|#~l_;{vy@MW&BQ)_wviAY5*-<$?zFuZ;=v^ z_{Cw9o1apelWJFF2;_pCRO~UCS3t__AscsxM{|Ay^9MEtCf0VzM#&D#8KpDQ8ze6? bs(oY<W;FcF%)q4n0n9SsXH+dR0BQyRG-yKH diff --git a/crisis_events.db b/crisis_events.db index c0173a3a9bd6203f6fd569ab359d40f6b60276f0..20d733224bf5bbaa1bdec121901d4ff43d8fe84c 100644 GIT binary patch literal 73728 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 literal 73728 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 F|9=(}e{lc+ diff --git a/crisis_events_database_metadata.json b/crisis_events_database_metadata.json index 96f6edc..3445073 100644 --- a/crisis_events_database_metadata.json +++ b/crisis_events_database_metadata.json @@ -1 +1 @@ -{"Users": 2, "Collections": 2} \ No newline at end of file +{"Users": 2, "Collections": 5} \ No newline at end of file diff --git a/flask_backend.py b/flask_backend.py index 98cfa6d..de564cc 100644 --- a/flask_backend.py +++ b/flask_backend.py @@ -13,6 +13,7 @@ import glob import summarizer_implementations.t5 as t5 import summarizer_implementations.nltk_summarizer as nltk import summarizer_implementations.bert as bert +import scraper app = Flask(__name__) app.config['JWT_SECRET_KEY'] = 'PI' @@ -227,7 +228,7 @@ def v1_summarize_t5(): glob = "" - if collection["type"] == "text": + if collection["type"] == "text" or collection["type"] == "url" or collection["type"] == "html": for file_path in items: with open(file_path, "r", encoding="utf8") as f: glob += f.read() @@ -264,7 +265,7 @@ def v1_summarize_nltk(): # files = database.get_raw_text_files(collection_info["collection_id"]) glob = "" - if collection["type"] == "text": + if collection["type"] == "text" or collection["type"] == "url" or collection["type"] == "html": for file_path in items: with open(file_path, "r", encoding="utf8") as f: glob += f.read() @@ -302,7 +303,7 @@ def v1_summarize_bert(): # files = database.get_raw_text_files(collection_info["collection_id"]) glob = "" - if collection["type"] == "text": + if collection["type"] == "text" or collection["type"] == "url" or collection["type"] == "html": for file_path in items: with open(file_path, "r", encoding="utf8") as f: glob += f.read() @@ -323,10 +324,9 @@ def v1_summarize_bert(): "status":"failure", }, 500 - -@app.route('/api/v1/upload_raw_text', methods=['POST']) -def v1_upload_raw_text(): - "http://127.0.0.1:5000//api/v1/upload_raw_text?collection=0" +@app.route('/api/v1/upload_url_file', methods=['POST']) +def v1_upload_url_file(): + "http://127.0.0.1:5000//api/v1/upload_url_file?collection=0" collection_id = request.args.get("collection") if not collection_id: @@ -336,19 +336,34 @@ def v1_upload_raw_text(): os.makedirs(f"./backend/storage/{collection_id}",exist_ok=True) - for zip_file in request.files.keys(): - path = f"./backend/storage/{collection_id}/{zip_file}" - request.files[zip_file].save(path) + for url_file in request.files.keys(): + path = f"./backend/storage/{collection_id}/{url_file}" + request.files[url_file].save(path) + print(f"Saved: {path}") - with zipfile.ZipFile(path, 'r') as zip_ref: - zip_ref.extractall(f"./backend/storage/{collection_id}") + with open(path, 'r', encoding='utf-8') as file: + urls = [line.strip() for line in file] + + for url in urls: #iterate through list of URLs + try: + text = scraper.scrape_url(url) + if text.lower().startswith('error'): #special case + continue + except Exception as e: + print(f"Error: {e}") + continue #disregard url + + file_name = url.split('/')[-1].strip() + '.txt' #determines file name by extracting last part of URL string + if file_name == '.txt': #special case + file_name = url.split('/')[-2].strip() + '.txt' + file_path = f'./backend/storage/{collection_id}/{file_name}' + with open(file_path, 'w', encoding='utf-8') as text_file: #write file to storage path with given name + text_file.write(text) glob_path = r'./backend/storage/' + collection_id + r'/*.txt' - for file_path in glob.glob(glob_path): database.create_raw_text_file(collection_id, file_path) - return {"status":"success"}, 200 @app.route('/api/v1/upload_raw_html', methods=['POST']) @@ -368,20 +383,25 @@ def v1_upload_raw_html(): request.files[zip_file].save(path) with zipfile.ZipFile(path, 'r') as zip_ref: - zip_ref.extractall(f"./backend/storage/{collection_id}") - - glob_path = r'./backend/storage/' + collection_id + r'/*.html' + #zip_ref.extractall(f"./backend/storage/{collection_id}") + for file_name in zip_ref.namelist(): #loop through each file name in zipped file + with zip_ref.open(file_name) as file: + content = file.read() + text = scraper.scrape_html(content) + file_path = f'./backend/storage/{collection_id}/{file_name}' + with open(file_path, 'w', encoding='utf-8') as text_file: + text_file.write(text) - ##deprecated code + glob_path = r'./backend/storage/' + collection_id + r'/*.txt' for file_path in glob.glob(glob_path): database.create_raw_text_file(collection_id, file_path) - ## return {"status":"success"}, 200 + -@app.route('/api/v1/upload_url_file', methods=['POST']) -def v1_upload_url_file(): - "http://127.0.0.1:5000//api/v1/upload_url_file?collection=0" +@app.route('/api/v1/upload_raw_text', methods=['POST']) +def v1_upload_raw_text(): + "http://127.0.0.1:5000//api/v1/upload_raw_text?collection=0" collection_id = request.args.get("collection") if not collection_id: @@ -391,10 +411,17 @@ def v1_upload_url_file(): os.makedirs(f"./backend/storage/{collection_id}",exist_ok=True) - for url_file in request.files.keys(): - path = f"./backend/storage/{collection_id}/{url_file}" - request.files[url_file].save(path) - print(f"Saved: {path}") + for zip_file in request.files.keys(): + path = f"./backend/storage/{collection_id}/{zip_file}" + request.files[zip_file].save(path) + + with zipfile.ZipFile(path, 'r') as zip_ref: + zip_ref.extractall(f"./backend/storage/{collection_id}") + + glob_path = r'./backend/storage/' + collection_id + r'/*.txt' + + for file_path in glob.glob(glob_path): + database.create_raw_text_file(collection_id, file_path) return {"status":"success"}, 200 @@ -415,10 +442,11 @@ def __get_items(id): elif c_type == "url": glob_path = r'./backend/storage/' + id + r'/*.txt' for file_path in glob.glob(glob_path): - with open(file_path) as file: - items = [line.rstrip() for line in file] + items.append(file_path) + # with open(file_path) as file: + # items = [line.rstrip() for line in file] elif c_type == "html": - glob_path = r'./backend/storage/' + id + r'/*.html' + glob_path = r'./backend/storage/' + id + r'/*.txt' for file_path in glob.glob(glob_path): items.append(file_path) diff --git a/scraper.py b/scraper.py index 0cb74c0..aec3fe1 100644 --- a/scraper.py +++ b/scraper.py @@ -64,6 +64,28 @@ def scrape_multi_webpage(filename): all_text += result + "\n" return json.dumps({"URLs": urls, "Text": all_text}) +def scrape_url(link): + headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} + + try: + resp = r.get(link, headers=headers) + resp.raise_for_status() + except requests.exceptions.RequestException as exception: + return f"Error identified: {exception}" + + soupObject = BeautifulSoup(resp.content, "html.parser") + text = "" + for paragraph in soupObject.find_all("p"): + text += paragraph.text + "\n" + return text + +def scrape_html(htmlText): + soupObject = BeautifulSoup(htmlText, 'html.parser') + text = "" + for paragraph in soupObject.find_all("p"): + text += paragraph.text + "\n" + return text + # webpage = "https://www.cbsnews.com/news/enrique-marquez-san-bernardino-shooter-friend-pleads-guilty-to-supplying-weapons/" -- GitLab