先说说项目背景吧。我们有个需求是要抓取某天气网站的数据做分析,需要获取全国主要城市未来七天的天气预报信息。网站本身没有提供开放接口,只能通过爬虫来实现数据采集。下面我直接上代码,结合关键步骤给大家讲解。

首先引入必要的依赖。我用的是Maven管理项目,在pom.xml里添加以下依赖:

核心代码我封装成了一个WeatherCrawler类。先来看类的成员变量和构造方法:

这里设置了User-Agent模拟浏览器访问,超时时间设为10秒。cityCodes是要抓取的城市代码列表。

接下来是核心的抓取方法:

这里有几个关键点需要注意:一是设置了合理的User-Agent,二是添加了随机延时,这些都是为了避免被网站反爬虫机制封锁。

解析HTML元素的方法如下:

这里用到了JSoup的选择器语法,跟jQuery的选择器很像,上手很容易。重点是找到页面中对应的CSS选择器,这个可以通过浏览器开发者工具查看元素获取。

数据模型类WeatherData就是个简单的POJO:

最后是使用示例:

在实际开发中遇到几个坑,这里特别提醒一下:

一定要设置超时时间,否则网络不好时线程会一直阻塞

需要处理SSL证书异常,可以在连接前加上:

对于动态加载的内容,可能需要配合Selenium等工具

重要数据记得做好异常处理和日志记录

这个爬虫虽然简单,但包含了完整的抓取、解析、存储流程。在此基础上还可以增加代理IP、分布式抓取、验证码识别等功能,应对更复杂的爬取场景。

爬虫开发最重要的是要遵守robots协议,控制访问频率,避免对目标网站造成太大压力。如果是商业用途,务必确保数据抓取的合法性。

代码已经上传到GitHub,需要完整项目的朋友可以私信我。大家在实际开发中遇到什么问题,欢迎在评论区交流讨论。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐