匹兹堡警察局数据抓取与可视化解决方案

需积分: 8 0 下载量 49 浏览量 更新于2024-10-24 收藏 28KB ZIP 举报
资源摘要信息:"pgh-crime-blotter是一个项目,旨在抓取匹兹堡警察局发布的每日事件和逮捕数据,然后将这些数据从PDF格式转换存储到PostgreSQL数据库中,并在网页上以可视化的方式展现出来。这个项目主要使用Python编程语言进行开发,涉及了PDF数据抓取、数据库操作以及Web开发等多个知识点。" 知识点详细说明: 1. **匹兹堡警察局数据公开**:匹兹堡警察局在其官方网站上每天更新前一天发生的事件和逮捕记录,这些数据通常以PDF格式发布。这种格式的可读性较差,因此需要转换为更易处理和展示的格式。 2. **数据抓取**:项目需要从匹兹堡警察局网站抓取PDF文件,提取出其中的事件数据。这通常需要编写脚本以模拟网络请求、下载文件,并解析PDF内容。 3. **数据存储**:抓取下来的事件数据需要被存储在数据库中,以便于后续的处理和查询。在本项目中,数据被存储在PostgreSQL数据库中。PostgreSQL是一个开源的对象-关系数据库系统,它支持大量的数据存储和复杂的查询操作。 4. **数据库模式设计**:在将数据存入数据库之前,需要设计数据库模式(schema)。根据描述,需要创建两个表:incident(事件表)和incidentdescription(事件描述表)。数据库模式设计涉及确定表结构、字段类型和表之间的关系等。 5. **PostgreSQL数据库操作**:包括设置数据库环境、创建表、插入数据以及进行查询等操作。具体到此项目中,需要执行sql/initialize.sql脚本来初始化数据库,创建所需的表结构。 6. **Python编程**:项目整体依赖于Python语言,这说明涉及到Python环境的搭建、Python依赖项的安装以及使用Python编写数据抓取、数据处理和数据库操作等功能模块。 7. **Python依赖项安装**:项目中可能使用了各种Python库(如requests, BeautifulSoup, psycopg2等),这些库用于处理网络请求、解析HTML或PDF文档以及与PostgreSQL数据库进行交互。在安装项目前需要确保这些依赖项通过pip等包管理工具安装到位。 8. **Web服务器设置**:项目被设计为一个Web应用,因此需要设置Web服务器。文档中提到使用Apache或其它网络服务器,意味着需要配置Web服务器以便于访问Python脚本或应用程序。 9. **地图可视化**:项目不仅限于数据存储和查询,还包括在地图上可视化这些数据。这可能意味着需要使用地理信息系统(GIS)相关技术,比如在网页上集成地图服务(如Google Maps API)或使用地图可视化库(如Leaflet或D3.js)。 10. **安全性与维护**:由于项目涉及到从警察局网站获取数据,并存储在公众可见的Web应用上,因此需要考虑到安全性问题,比如防止SQL注入、XSS攻击等。同时,随着匹兹堡警察局发布数据格式的变化,代码和数据库模式可能需要定期更新和维护。 该资源摘要信息对pgh-crime-blotter项目的背景、实现目标、技术栈、实现步骤和潜在应用领域进行了全面的概述,旨在为需要此项目信息的用户提供详细的参考。

public int convert2Ofd(int imagefileid, String filename,String docdcsurl) { writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------start"); //String docdcsurl = Util.null2String(getPropValue("yzDcsUrl", "docdcsurl")); writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------imagefileid=" + imagefileid + ";filename=" + filename + ";docdcsurl=" + docdcsurl); int newimagefileid = -1; try { if (imagefileid > 0 && !"".equals(filename) && !"".equals(docdcsurl)) { String fileext = ""; if (filename.indexOf(".") != -1) { fileext = filename.substring(filename.lastIndexOf(".")); } writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------fileext=" + fileext); String sourcefilepath = getImageFile(imagefileid + ""); writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------sourcefilepath=" + sourcefilepath); if (!"".equals(sourcefilepath)) { String dcsurl = convert(docdcsurl, sourcefilepath, "29"); writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------dcsurl=" + dcsurl); if (!"".equals(dcsurl)) { InputStream input = getInputStreamFromDcs(dcsurl); writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------input=" + input); String newfilename = filename.substring(0, filename.lastIndexOf(".")) + ".ofd"; if (input != null) { newimagefileid = savePdfImageFile(input, newfilename); } if (new File(sourcefilepath).exists() && new File(sourcefilepath).isFile()) { new File(sourcefilepath).delete(); } } } } } catch (Exception e) { writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------Exception=" + e); } writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------newimagefileid=" + newimagefileid); writeLog("ConvertToPdfForDcsE9--convertUot2Ofd-------------------end"); return newimagefileid; } 这段代码里2023-06-07 10:00:41,501 INFO A2 - [null] pool-20-thread-1-827[weaver.odoc.ofd.util.ConvertToPdfForDcs:395] - ConvertToPdfForDcsE9--convertUot2Ofd-------------------Exception=java.net.MalformedURLException: no protocol: {"data":{"fileHash":"f68995999879716524d33048cf89713eb6909b540af36f0c1326666747933f7f1","code":0,"destFileName":"5cf6fc7a-b466-4d2f-bd8a-90021ece7f03.ofd","srcFileName":"5cf6fc7a-b466-4d2f-bd8a-90021ece7f03.docx","srcFileSize":"1470724","destFileSize":"272921","convertType":29,"srcStoragePath":"f68995999879716524d33048cf89713eb/5cf6fc7a-b466-4d2f-bd8a-90021ece7f03.docx","destStoragePath":"2023/06/07/d897526c6b1848d38158e2d397dc1564/5cf6fc7a-b466-4d2f-bd8a-90021ece7f03.ofd","convertTime":"4224","viewUrl":"http://10.2.120.2:19090/fcscloud/view/preview/__u_3ZnLmSOahAqKi6icTcKJrPrgXJLd2m6bLJJ9Vy1AE7bOu07HXJe5EdV3ICfU4--G5-1b-C_BMkuxJ6YiThUP9cZrRTnS8WH7LNaAySY1b4J6VNRm5bUix26SO24700BVblzn6_Sgh3k8GCEv2iW5ceUlHmsE-UIfGUPobbnm9fShs4Gg-L5wSnmdcobmWgVCHNZvPMzNAj5FNM1RAAY0iGeLBNp1ezhgLFc-LsEC5fArMOLpbVonVHX-liJuUKBubUznMLCwaouob5HRqFnSwB6l-qEWFMyKeKK7yOknI8K-59iCZpKpUAzxt4hPezq1Pgh1nR1tTtwEypycLkvEnWyugeKTxu9mwyN_fFfIUyv6oV7P79BMIZt2o-B6kDJgXVaMxne2wjydgWr2nir306Hg_R0R0zS-Z4yG74g=/"},"message":"操作成功","errorcode":0}这个异常应该怎么修改

2023-06-08 上传