网络爬虫-实验手册
网络爬虫
1.实验目标
1.熟悉网络爬虫的相关概念及实现网络爬虫的相关流程。
2.了解WebCollector框架的基本原理。
3.熟练掌握在Eclipse项目中配置使用WebCollector爬虫。
2.前提条件
1.正确安装和配置Java开发环境。
2.了解网络爬虫的相关知识
3.进入下载所需jar包。
3.实验任务及完成标准
本次实验通过WebCollector框架实现一个简单的聚焦网络爬虫。
用户可根据自己的需求定制网络爬虫,设定待爬取的网址、爬取网页的数量、爬取网页的内容等。
通过对该实例的详细介绍来探讨网络爬虫的原理及在实际生活中的应用。
在此实例的基础上,学生需要独立完成更为复杂的聚焦网络爬虫,来爬取更有意义的内容。
具体要求见“4 扩展内容”。
3.1建立应用程序项目
打开eclipse,创建本次实验项目htmlCrawler(【File】->【New】->【Java Project】
)如图1所示。
图1 创建工程
3.2在Eclipse项目中配置使用WebCollector爬虫
1 选中htmlCrawler 右键,选中【New】->【Folder】,输入文件名称“lib”,如下图2所示。
图2 创建文件夹
2解压缩webcollector-2.26-bin.zip,拷贝所有的Jar包,放到lib
目录中,如图3所示。
图3 目录结构图
3将文件夹lib中的所有jar包添加到build path中,如图4、图5、图6所示。
图4
图5
图6
依次选中jar包,导入到工程中。
4 如果想看WebCollector的源码,可以为Jar包关联源码(可选),如图6、图7所示。
图6
图7
3.3现在可以编写WebCollector爬虫的代码了
新建一个类Crawler.java,继承自BreadthCrawler。
重写visit方法,来实现满足自己需求的爬虫即可。
如图8、图9所示。
图8
图9
图10。
网络爬虫试验报告
网络爬虫实验报告院系:国际教育学院班级:互联网12—02姓名:***学号:************“网络蜘蛛”或者说“网络爬虫”,是一种能访问网站并跟踪链接的程序,通过它,可快速地画出一个网站所包含的网页地图信息。
本文主要讲述如何使用Java编程来构建一个“蜘蛛”,我们会先以一个可复用的蜘蛛类包装一个基本的“蜘蛛”,并在示例程序中演示如何创建一个特定的“蜘蛛”来扫描相关网站并找出死链接。
Java语言在此非常适合构建一个“蜘蛛”程序,其内建了对HTTP协议的支持,通过它可以传输大部分的网页信息;其还内建了一个HTML解析器,正是这两个原因使Java语言成为本文构建“蜘蛛”程序的首选。
文章后面例1的示例程序,将会扫描一个网站,并寻找死链接。
使用这个程序时需先输入一个URL并单击“Begin”按钮,程序开始之后,“Begin”按钮会变成“Cancel”按钮。
在程序扫描网站期间,会在“Cancel”按钮之下显示进度,且在检查当前网页时,也会显示相关正常链接与死链接的数目,死链接将显示在程序底部的滚动文本框中。
单击“Cancel”按钮会停止扫描过程,之后可以输入一个新的URL;如果期间没有单击“Cancel”,程序将会一直运行直到查找完所有网页,此后,“Cancel”按钮会再次变回“Begin”,表示程序已停止。
下面将演示示例程序是如何与可复用“Spider”类交互的,示例程序包含在例1的CheckLi nks类中,这个类实现了ISpiderReportable接口,如例2所示,正是通过这个接口,蜘蛛类才能与示例程序相交互。
在这个接口中,定义了三个方法:第一个方法是“spiderFou ndURL”,它在每次程序定位一个URL时被调用,如果方法返回true,表示程序应继续执行下去并找出其中的链接;第二个方法是“spiderURLError”,它在每次程序检测URL导致错误时被调用(如“404 页面未找到”);第三个方法是“spiderFoundEMail”,它在每次发现电子邮件地址时被调用。
爬虫实验报告
爬虫实验报告一、实验背景随着互联网的迅速发展,大量有价值的信息隐藏在网页之中。
为了更高效地获取和处理这些信息,爬虫技术应运而生。
本实验旨在深入研究爬虫技术的原理和应用,探索其在数据采集方面的可行性和效果。
二、实验目的1、了解爬虫的基本工作原理和流程。
2、掌握使用 Python 编写爬虫程序的方法和技巧。
3、能够从指定的网站中准确、高效地抓取所需的数据。
4、分析爬虫过程中可能遇到的问题及解决方案。
三、实验环境1、操作系统:Windows 102、开发语言:Python 383、相关库:requests、BeautifulSoup4、lxml四、实验原理爬虫程序通过模拟浏览器向服务器发送请求,获取网页的 HTML 代码。
然后对 HTML 代码进行解析,提取出所需的数据。
常见的解析方法有正则表达式、XPath、BeautifulSoup 等。
五、实验步骤(一)确定目标网站和数据需求选择了一个公开的新闻网站作为目标,希望获取其首页上的新闻标题、发布时间和内容摘要。
(二)分析网页结构使用浏览器的开发者工具,查看目标网页的 HTML 结构,确定数据所在的标签和属性。
(三)编写爬虫代码```pythonimport requestsfrom bs4 import BeautifulSoupdef crawl_news():url ='response = requestsget(url)if responsestatus_code == 200:soup = BeautifulSoup(responsetext, 'lxml')news_list = soupfind_all('div', class_='newsitem')for news in news_list:title = newsfind('h2')texttime = newsfind('span', class_='time')textsummary = newsfind('p', class_='summary')textprint(f'标题:{title}')print(f'发布时间:{time}')print(f'摘要:{summary}')else:print(f'请求失败,状态码:{responsestatus_code}')if __name__ =='__main__':crawl_news()```(四)运行爬虫程序在命令行中运行代码,观察输出结果。
网络爬虫实验报告
网络爬虫实验报告网络爬虫实验报告一、引言随着互联网的迅猛发展,人们对于信息的获取需求也越来越迫切。
而网络爬虫作为一种自动化的数据采集工具,被广泛应用于各个领域。
本报告旨在介绍网络爬虫的原理、应用以及实际实验过程,并总结实验结果。
二、网络爬虫的原理网络爬虫是一种自动化程序,通过模拟人的浏览行为,自动访问网页并提取所需的信息。
其原理主要包括以下几个步骤:1. 发送请求:爬虫首先向目标网站发送HTTP请求,获取网页的源代码。
2. 解析网页:通过解析HTML源代码,爬虫可以提取出所需的信息,如标题、链接、图片等。
3. 存储数据:爬虫将提取到的数据存储到本地文件或数据库中,以便后续的分析和应用。
三、网络爬虫的应用网络爬虫在各个领域都有广泛的应用,以下是一些常见的应用场景:1. 搜索引擎:搜索引擎利用爬虫技术来抓取互联网上的网页,并建立索引,为用户提供快速准确的搜索结果。
2. 数据分析:爬虫可以用于采集大量的数据,如股票行情、天气数据等,以便进行数据分析和预测。
3. 舆情监测:通过爬虫技术,可以实时监测社交媒体、新闻网站等平台上的舆情信息,帮助企业进行舆情分析和危机公关。
四、实验过程本次实验我们选择了一个电商网站作为实验对象,目的是抓取该网站上的商品信息,并进行数据分析。
1. 确定目标网站:我们选择了一个知名的电商网站作为实验对象,该网站拥有大量的商品信息。
2. 编写爬虫程序:我们使用Python语言编写了一个简单的爬虫程序,通过发送HTTP请求获取网页源代码,并使用正则表达式提取商品信息。
3. 数据存储:我们将提取到的商品信息存储到本地的CSV文件中,方便后续的数据分析。
五、实验结果经过实验,我们成功地抓取了目标网站上的大量商品信息,并将其存储到本地文件中。
通过对这些数据的分析,我们得出了以下几个结论:1. 商品价格:通过统计分析,我们发现该电商网站的商品价格呈现一定的分布规律,可以根据这些数据制定合理的价格策略。
网络爬虫试验报告.doc
网络爬虫试验报告.doc
网络爬虫作为信息技术的重要分支,深刻地影响着人们的日常生活。
本次实验采用Python语言编写,考察网络爬虫原理与应用能力,试验表明:
1. 爬虫程序在搜索网页时,确实能找出其中指定网站上的所有信息,具有完善的基本功能;
2. 爬虫程序能够以字符串的方式对网页内容搜索,实现了精准搜索;
3. 爬虫程序还可以获取更为丰富的信息,比如网页布局和源代码。
4. 同时,爬虫程序还可以使用cookies变量和会话技术,以实现用户认证及数据的追踪,帮助风险识别及分析。
整体而言,爬虫程序是一款功能强大,应用广泛的信息搜索工具。
它不仅可以有效提高信息检索效率,而且可以将搜索结果汇总成报告,有助于数据挖掘与分析工作。
经过本次试验,主要原理、应用能力以及用户友好的界面设计能力得到了充分验证,适用于实际项目的网络搜索。
网络爬虫软件操作指南
网络爬虫软件操作指南第一章:网络爬虫的基础概念及工作原理网络爬虫(Web Crawler)是一种自动化程序,用于自动抓取互联网上的信息。
它可以模拟浏览器的行为,访问网页并提取所需的数据。
网络爬虫的工作原理是通过发送HTTP请求获取网页源代码,然后解析源代码,从中提取所需的信息。
第二章:选择适合的网络爬虫软件目前市面上存在众多的网络爬虫软件可供选择。
根据不同的需求和技术能力,可以选择合适的软件进行使用。
常见的网络爬虫软件有:Scrapy、BeautifulSoup、Selenium等。
选择合适的网络爬虫软件需要考虑其功能、易用性和性能等方面的因素。
第三章:安装和配置网络爬虫软件在使用网络爬虫软件前,需要先进行安装和配置。
首先,下载网络爬虫软件的安装包,并根据软件的安装说明进行安装。
安装完成后,需要进行环境配置,包括设置代理、配置数据库等。
正确的配置可以提高网络爬虫的效率和稳定性。
第四章:编写网络爬虫代码网络爬虫代码可以根据需求自行编写,也可以使用已有的代码作为基础进行修改。
编写网络爬虫代码的时候,需要注意以下几点:选择合适的编程语言、了解目标网站的结构、设置合理的抓取间隔和并发数、处理异常情况等。
良好的编码习惯和规范可以提高代码的可读性和可维护性。
第五章:爬取网页数据爬取网页数据是网络爬虫的核心任务。
在开始爬取之前,需要明确要爬取的数据类型和所在的位置。
可以通过观察网页的源代码和利用浏览器开发者工具等方法找到待抓取的数据。
在爬取过程中,需要注意反爬措施,并采取相应的策略,如设置请求头、使用代理IP等。
第六章:数据处理和存储爬取到的数据需要进行进一步的处理和存储。
处理数据的方式包括数据清洗、数据去重、数据转换等。
可以使用Python提供的数据处理库,如Pandas、NumPy等进行数据的处理。
存储数据的方式有多种选择,如保存为文本文件、存储到数据库中、存储到云平台等。
第七章:定时任务和持续监控定时任务和持续监控是网络爬虫的重要组成部分。
Python网络爬虫实践教程
Python网络爬虫实践教程一、什么是网络爬虫网络爬虫,也称为网络蜘蛛或网络机器人,是一种自动获取互联网信息的程序工具。
通过模拟浏览器行为,爬虫程序可以访问网页、提取网页中的数据,在大规模数据采集、搜索引擎、数据分析等领域发挥着重要作用。
二、网络爬虫的基本原理网络爬虫的基本原理是通过发送HTTP请求,并解析响应得到的HTML文档来获取网页数据。
首先,我们需要使用Python中的requests库发送网络请求,并获得服务器的响应。
然后,通过解析HTML文档,提取出我们需要的数据。
三、准备工作在开始编写网络爬虫之前,我们需要安装Python以及相关的库。
首先,需要安装Python解释器和pip包管理工具。
然后,使用pip安装requests、beautifulsoup和lxml等库。
四、发送HTTP请求在编写爬虫程序之前,我们需要了解如何使用Python发送HTTP请求。
使用requests库发送GET请求非常简单,只需要调用get方法,并提供目标网址即可。
如果需要发送POST请求,同样使用post方法,并在参数中传递需要提交的数据。
五、解析HTML文档解析HTML文档是爬虫中非常重要的一步。
Python提供了多种解析HTML的库,其中比较常用的是beautifulsoup和lxml。
通过指定解析器,我们可以轻松地提取出HTML文档中的各个元素,并进行进一步的处理。
六、处理反爬机制为了阻止爬虫程序的访问,许多网站采取了反爬机制,例如设置验证码、限制IP访问频率等。
对于这些反爬措施,我们可以通过使用代理IP、设置请求头信息、使用验证码识别技术等方法来绕过。
七、数据存储与分析在爬虫过程中,我们通常需要将获取的数据进行存储和分析。
常用的数据存储方式包括将数据保存到数据库、文本文件、Excel 表格或者CSV文件中。
而要对数据进行分析,可以使用Python中的数据分析库,如pandas、numpy等。
八、实践案例:爬取豆瓣电影数据为了更好地理解网络爬虫的实践过程,我们以爬取豆瓣电影数据为例进行讲解。
爬虫统计实验报告
爬虫统计实验报告爬虫统计实验报告引言:网络爬虫是一种自动化程序,通过模拟人类浏览器的行为,从互联网上获取数据。
在当今信息爆炸的时代,爬虫在数据采集和分析方面扮演着重要的角色。
本文将介绍我们进行的一项爬虫统计实验,探讨其应用和结果。
实验目的:本次实验的目的是通过使用爬虫技术,收集并分析某特定领域的数据,以了解该领域的发展趋势、热门话题以及相关参与者的活跃度。
通过这些统计数据,我们可以为决策者提供有价值的信息,帮助他们做出更明智的决策。
实验步骤:1. 确定数据源:我们选择了某知名社交媒体平台作为数据源,该平台上有大量用户生成的内容,涵盖了各个领域的讨论和交流。
2. 设计爬虫程序:为了获取数据,我们编写了一套爬虫程序,通过模拟用户的行为,自动访问并抓取相关页面的内容。
我们设置了一些规则来过滤无关或低质量的数据。
3. 数据清洗和整理:由于网络上的数据质量参差不齐,我们需要进行数据清洗和整理,去除重复、垃圾或无效的数据,并将数据按照一定的结构进行整理,以方便后续的统计分析。
4. 统计分析:我们使用了一些统计方法和工具来对数据进行分析,包括文本挖掘、关键词提取、用户行为分析等。
通过这些分析,我们可以获得一些有关该领域的重要信息。
实验结果:通过对大量数据的收集和分析,我们得出了一些有意义的结果。
首先,我们发现某特定领域的讨论热度逐年增长,表明该领域具有较高的关注度和发展潜力。
其次,我们发现某些关键词在讨论中频繁出现,这些关键词反映了该领域的热门话题和关注点。
此外,我们还发现了一些活跃的用户,他们在该领域的讨论中发表了大量有价值的观点和见解。
实验应用:本次实验的结果可以应用于多个方面。
首先,对于决策者来说,这些统计数据可以帮助他们了解市场需求和潜在机会,从而制定更具针对性的战略和政策。
其次,对于研究人员来说,这些数据可以为他们提供有关该领域的研究方向和热门话题,帮助他们进行更深入的研究。
此外,对于普通用户来说,这些数据可以让他们了解该领域的最新动态和趋势,帮助他们做出更明智的决策。
网络爬虫性能测试说明
网络爬虫性能测试说明网络爬虫性能测试说明1. 引言网络爬虫是一种自动化工具,用于从互联网上抓取、解析和存储数据。
在进行大规模数据采集时,爬虫的性能往往成为一个重要指标。
本文将介绍网络爬虫性能测试的目的、方法和步骤,以及如何评估和改进网络爬虫性能。
2. 目的网络爬虫性能测试的主要目的是评估爬虫的速度和稳定性。
通过性能测试,可以确定爬虫在不同负载下的响应时间、传输速度、并发处理能力等指标,帮助开发者了解爬虫的性能瓶颈,并进行性能优化。
3. 方法和步骤网络爬虫性能测试的方法和步骤主要包括以下几个方面:3.1 测试环境准备搭建一个与实际生产环境相似的测试环境,包括服务器、网络带宽、数据库等。
在服务器上安装和配置爬虫程序,并准备足够的测试数据。
3.2 确定测试目标和负载确定测试的目标,如采集数据的量,访问网站的频率等。
根据目标制定合理的负载方案,包括并发请求数、采集深度、重试策略等。
3.3 编写测试脚本使用合适的测试工具,如JMeter、Locust等,编写测试脚本。
测试脚本应包含模拟用户访问网站、发送请求、解析数据等操作。
3.4 运行性能测试根据制定的测试方案,运行测试脚本进行性能测试。
测试期间应监控系统资源的使用情况,如CPU、内存、磁盘IO等,以及网络带宽的消耗。
3.5 收集和分析测试结果收集测试过程中的各项数据,包括响应时间、传输速度、错误率等。
对测试结果进行分析,找出性能瓶颈和改进的空间。
4. 评估和改进网络爬虫性能通过性能测试的结果,可以对网络爬虫的性能进行评估,并进行相应的改进。
具体的评估和改进方法有以下几个方面:4.1 优化网络请求网络请求是爬虫性能的关键之一。
可以通过使用多线程、使用高性能的HTTP库、减少不必要的重试等方法来优化网络请求的速度和稳定性。
4.2 优化数据解析数据解析也是爬虫性能的重要因素。
可以通过使用高效的HTML解析库、使用正则表达式和XPath等快速解析数据的方法来优化数据解析的速度。
Python网络爬虫的实战指南
Python网络爬虫的实战指南随着互联网的快速发展,网络数据的获取和利用变得越来越重要。
而Python作为一种简单易学且功能强大的编程语言,被广泛应用于网络爬虫的开发。
本文将为大家介绍Python网络爬虫的实战指南,帮助读者快速入门并掌握网络爬虫的基本技巧和注意事项。
一、网络爬虫的基本概念和原理网络爬虫是一种自动化程序,可以模拟人的行为在互联网上浏览和获取数据。
它通过发送HTTP请求获取网页内容,并解析网页结构,提取所需的数据。
网络爬虫的原理可以简单概括为以下几个步骤:1. 发送HTTP请求:使用Python的requests库可以方便地发送HTTP请求,并获取服务器返回的网页内容。
2. 解析网页:使用Python的解析库(如BeautifulSoup、lxml等)可以解析HTML或XML格式的网页,提取所需的数据。
3. 数据处理和存储:对于获取的数据,可以进行进一步的处理和清洗,然后存储到数据库或文件中。
二、Python网络爬虫的常用库和工具Python提供了丰富的库和工具,用于开发网络爬虫。
以下是一些常用的库和工具:1. requests:用于发送HTTP请求和获取网页内容。
2. BeautifulSoup:用于解析HTML或XML格式的网页。
3. Scrapy:一个功能强大的网络爬虫框架,提供了高度可定制的爬虫开发环境。
4. Selenium:用于模拟浏览器行为,处理动态网页。
5. Pandas:用于数据处理和分析。
6. MongoDB:一种非关系型数据库,适合存储大量的结构化数据。
7. PyQuery:类似于jQuery的库,用于解析HTML。
三、网络爬虫的基本技巧和注意事项1. 设置合理的请求头:有些网站会根据请求头的信息来判断请求是否合法,因此在编写爬虫时,需要设置合理的请求头,模拟真实的浏览器行为。
2. 遵守网站的爬虫协议:有些网站会在robots.txt文件中规定了爬虫的访问权限,爬虫在访问时需要遵守这些规定,以免触发反爬虫机制。
网络爬虫实验
湖北文理学院《网络数据挖掘项目解决方案》实验报告专业班级:软件工程1111班*名:***学号:**********任课教师:***2014 年9 月20 日实验5 网络数据挖掘解决方案(X学时)一、实验目的与要求1、掌握小型项目的架构与设计;2、能够独自实现小型项目的开发;3、通过实现网络数据挖掘项目,锻炼综合应用能力。
二、预习与准备1、Swing编程;2、正则表达式的使用;3、网络数据的提取;4、分层架构。
三、实验内容1、实现网络数据挖掘项目;2、撰写实验报告。
四、实验过程1.首先明确项目解决思路:首先建立数据库→用swing编写用户界面→从数据库获取StockId→通过StockId 获取UR→利用URL可以得到URL里面的内容→对该内容进行解析,获取需要的数据→存入数据库。
2.了解该项目的系统架构:显示层:构建用户界面,提供用户中介业务逻辑层:1)获取StockId; 2) 通过StockId获取URL;3)通过URL提取网页内容;4)解析网页内容获取需要的数据; 5)存入相应的数据库。
数据访问层:实现对于数据库的访问,连接,增加,修改,删除,查询。
3、开始项目(1)建数据库(2)建立数据库的连接并定义增删改查操作接口public class Conn {private static String driver="com.mysql.jdbc.Driver";private static Stringurl="jdbc:mysql://127.0.0.1:3306/st?useUnicode=true&characterEncoding=utf8& zeroDateTimeBehavior=convertToNull";private static String user="root";private static String password="root";public static Connection getConn(){Connection conn=null;try{Class.forName(driver);conn=DriverManager.getConnection(url, user, password);}catch (Exception e) {e.printStackTrace();}return conn;}//获得数据库的连接public static Connection getConnection(String className,String url,String user,String password){Connection connection = null;try {Class.forName(className);connection = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();}return connection;}public static void main(String[] args) {int i = updateStockName("华夏","0600031");}//更新股票名称public static int updateStockName(String stockName,String stockId){ Connection connection = getConnection(driver, url, user, password);int result = 0;try {Statement statement = connection.createStatement();result = statement.executeUpdate("update stockbase set stockname ='"+stockName+"' where stockid = '"+stockId+"'");return result;} catch (Exception e) {// TODO Auto-generated catch blockresult = 0;}return result;}//获得股票的idpublic static List getStockIds() {List list=null;Connection connection = getConnection(driver, url, user, password);try {Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("select stockid from stockbase");list = new ArrayList();while(resultSet.next()){list.add(resultSet.getString(1));}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return list;}//向stockmoney中插入数据public static int insertStockFH(List<List> list) {Connection connection = getConnection(driver, url, user, password);int result = 0 ;try {for(int i=0;i<list.size();i++){List stocklist = list.get(i);for(int j=0;j<(stocklist.size()/5);j++){Statement statement = connection.createStatement();Stringid=stocklist.get(5*j+0).toString()+stocklist.get(5*j+1).toString();result = statement.executeUpdate("insertstockmoney(id,stockid,year,qian,songgu,zhuangu) values (" +"'"+id+"','"+stocklist.get(5*j+0)+"','"+stocklist.get(5*j+1)+"','"+stocklist.get(5*j+4)+"','"+stocklist.get(5*j+2)+"','"+stocklist.get(5*j+3)+"')");}}} catch (Exception e) {// TODO Auto-generated catch blockresult=0;}System.out.println(result);return result;}//删除所有的钱public static Boolean deleteAllmoney() {Boolean result = null;Connection connection = getConnection(driver, url, user, password);try {Statement statement = connection.createStatement();result = statement.execute("delete from stockmoney");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}}(3)定义URL连接接口public class WebConnUtil {public String getWebContent(URLConnection urlConnection) {InputStream is;StringBuffer sb = new StringBuffer();try {is = urlConnection.getInputStream();System.out.println(is);InputStreamReader isr=new InputStreamReader(is,"utf-8");BufferedReader br=new BufferedReader(isr);String strLine;while((strLine=br.readLine())!=null){sb.append(strLine);}} catch (IOException e) {System.out.println("连接失败");}return new String(sb);}}(4)对获取的内容进行分析public class Search extends Thread{//通过id获得名字public List getStockNames(Stock stock, List stockId) {List list = new ArrayList();StringBuffer sb=new StringBuffer();sb=sb.append("\t\t股票代码\t股票名称\n");for(int i=0;i<stockId.size();i++){String nameurl ="/"+stockId.get(i)+".html";stock.jTextField1.setText("正在加载id为'"+stockId.get(i)+"'的股票名称");try {URL url = new URL(nameurl);URLConnection urlConnection = url.openConnection();String webcontent =newWebConnUtil().getWebContent(urlConnection);String regExp = "<h1 class=\"name\">(.{1,2})\\s*<ahref='(.{1,50})'>(.{1,8})</a>";StringBuffer sbSec = new StringBuffer();Pattern pat = pile( regExp );Matcher mat = pat.matcher(webcontent);if( mat.find() ){list.add(mat.group(3));}stock.jProgressBar1.setValue(100);Thread.sleep(100);sb=sb.append("\t\t"+stockId.get(i)+"\t"+mat.group(3).toString()+"\n");stock.jTextArea1.setText(sb.toString());stock.jProgressBar1.setValue(0);} catch (Exception e) {// e.printStackTrace();list.add("无");System.out.println("不匹配");}}stock.jTextField1.setText("加载完成,已下载到数据库!");return list;}public List<List> getStockFenhong(Stock stock, List stockId) { List fhlist = new ArrayList<List>();StringBuffer sb = new StringBuffer();sb=sb.append("\t股票名称\t股票代码\t分红年度\t送股\t转股\t分红\n");s tock.jTextArea1.setText(new String(sb));for(int i=0;i<stockId.size();i++){String nameurl ="/f10/fhpg_"+stockId.get(i).toString().substring (1)+".html";stock.jTextField1.setText("正在加载id为'"+stockId.get(i)+"'的股票的分红信息");try {URL url = new URL(nameurl);URLConnection urlConnection = url.openConnection();String webcontent =newWebConnUtil().getWebContent(urlConnection);List list = null;String regExp = "<td class='align_c'>(.{1,12})</td><tdclass='align_c'>(.{1,4})</td><td>(.{1,10})</td><td>(.{1,10})</td><td>(.{1,1 0})</td><td class='align_c'>(.{1,20})</td><tdclass='align_c'>(.{1,20})</td><td class='align_c'>(.{1,20})</td></tr></tr>";StringBuffer sbSec = new StringBuffer();Pattern pat = pile( regExp );Document doc = Jsoup.parse(webcontent);Elements trs = doc.getElementsByClass("inner_box") .select("table").get(0).select("tr").select("td").after("</thead>").befo re(" </table>");Elements stockname =doc.getElementsByClass("name").select("h1").select("a");list = new ArrayList();stock.jProgressBar1.setMaximum(trs.size()/8);for(int j=1;j<=trs.size();j+=8){s tock.jProgressBar1.setValue(j);l ist.add(stockId.get(i).toString().substring(1));l ist.add(trs.get(j).text());l ist.add(trs.get(j+1).text());l ist.add(trs.get(j+2).text());l ist.add(trs.get(j+3).text());s b=sb.append("\t"+stockname.text().substring(0,4)+"\t"+stockId.get(i).toString()+"\t"+trs.get(j).text()+"\t"+trs.get(j+1).text()+"\t"+trs.get(j+2).text()+"\t"+trs.get(j+3).text()+"\n");s tock.jTextArea1.setText(new String(sb));}Thread.sleep(100);stock.jProgressBar1.setValue(0);fhlist.add(list);} catch (Exception e) {// TODO Auto-generated catch blockSystem.out.println("网页不存在");}}stock.jTextField1.setText("加载完成,已下载到数据库!");return fhlist;}}(4)编写swing用户界面并调用相关的接口3、效果截图五、实验总结与体会实验五是对前面几个项目的一个综合,因为有了前面几个项目的基础,所以此次试验做的还比较顺利。
