java爬虫抓取网页数据(基本思路网络爬虫的基本思路(HTML解析)(图))
优采云 发布时间: 2021-12-25 01:07java爬虫抓取网页数据(基本思路网络爬虫的基本思路(HTML解析)(图))
HTML解析:Jsoup
基本思想
一个网络爬虫的基本思想是:爬虫线程从待爬取的URL队列中取一个URL->模拟浏览器对目标URL的GET请求->下载网页内容->然后解析其中的内容页面并获取目标数据 保存到相应的存储 -> 使用一定的规则从当前抓取的网页中获取下一个需要抓取的URL。
当然,以上思路是基于爬取过程不需要模拟登录,爬取的网站比较厚道,不会做一些“反爬”的工作。但是,在现实中,模拟登录有时很重要(比如新浪微博);不会爬回来的 网站 非常罕见。频繁访问本站时,可能会出现账号被冻结、IP被封等情况,并返回“系统繁忙”、“请慢慢访问”等信息。. 因此,需要增强爬虫的健壮性:增加反爬虫信息的处理、动态切换账号/IP、访问延时等。
程序架构
由于模拟登录模块比较复杂,不同网站实现的机制也不一样,这里只给出*敏*感*词*。下面主要针对不需要登录的爬虫进行分析。
Worker:每个worker都是一个爬虫线程,由主线程SpiderStarter创建
登录(可选):爬虫模拟登录模块,可以设置账号队列,一旦账号被冻结,放到队列末尾,从头部获取新账号重新登录。队列长度需要>=账户冻结时间/每个账户可以支持的连续爬行时间
Fetcher:爬虫模拟浏览器发出GET URL请求下载页面
Handler:对Fetcher下载的页面进行初步处理,比如判断页面的返回状态码是否正确,页面内容是否为反爬信息等,以确保页面传递给Parser进行处理分析正确
Parser:解析Fetcher下载的页面内容,获取目标数据
Store:将Parser解析的目标数据存储到本地存储,可以是传统的MySQL数据库或Redis等KV存储
待爬取队列:存放需要爬取的URL
爬取队列:存放已爬取的页面的URL
程序流程图
下面是爬虫实现的流程图。图中绿框表示这些步骤在同一个模块中,模块名称用红色字母表示。
代码
明天就要开学了,加上实验室的任务,没时间好好写了。我写了一个比较水的,eclipse项目,大概就是上面流程图的实现。很多地方需要根据具体的爬取场景来进行。实现是用注释解释的,真心希望以后能打包的更漂亮一些。
丑陋的妻子看到公婆来了。点我看丑>_