新闻爬取配置指南
2023年5月24日大约 7 分钟
新闻爬取工具主要为网办平台
新闻组件提供数据源,该文档主要帮助实施人员对站群类新闻爬取提供配置指南
前置条件
- 平台需要部署
news-grad-service服务。 - 抓取服务要能访问被抓取站点。
配置初始化
修改nacos配置文件news-dbpool.yml,参考配置进行修改:
## 配置:抓取规则,再`新闻抓取配置`中讲解如何进行配置
role: "[{\"id\":2,\"cron\":\"0 * * * * ? *\",\"url\":\"http://lxy.tjcu.edu.cn/index/xyxw.htm\",\"title\":\"学院新闻\",\"home_url\":\"http://lxy.tjcu.edu.cn/\",\"type\":1,\"grab_day\":30,\"post_method\":\"get\",\"pool_name\":\"portal\",\"parse\":[{\"type\":1,\"notice_type\":\"学院新闻\",\"select_root_selector\":\".listUl li\",\"select_url_selector\":\"a.c1155\",\"select_url_attr\":\"href\",\"select_title_selector\":\"a.c1155\",\"select_title_attr\":\"title\",\"select_date_selector\":\".c1155_date\",\"select_date_attr\":\"\",\"select_date_start\":\"\",\"select_date_end\":\"\",\"select_date_format\":\"yyyy年MM月dd日\"}]}]"
## 配置:抓取缓存时间(单位天)
grabnews_cache_day: 2
## 配置:数据库配置
db: "{\"portal\":{\"drivers\":\"com.mysql.cj.jdbc.Driver\",\"url\":\"jdbc:mysql://10.10.10.156:3306/lightcode_cloud_dev\",\"user\":\"xxx\",\"password\":\"xxx\",\"idleTimeout\":\"900\",\"maxPool\":\"50\",\"date_format\":\"yyyy-MM-dd\",\"insert_sql\":\"INSERT INTO config_article(name,category,url,push_time,create_time,article_type,preview_pictures)VALUES(<@>title<@>,<@>type<@>,<@>url<@>,<@>date<@>,now(),'1',<@>img<@>)\",\"count_sql\":\"SELECT count( id ) AS z_count FROM config_article WHERE NAME = <@>title<@> AND category = <@>type<@> AND IFNULL(url, ' ') = <@>url<@> \",\"annex_sql\":\"INSERT INTO config_article(id,preview_pictures)VALUES(<@>id<@>,<@>img<@>)\"}}"- db配置说明:
{
"portal": {
"drivers": "com.mysql.cj.jdbc.Driver",
## 配置:主数据库链接地址
"url": "jdbc:mysql://10.10.10.156:3306/lightcode_cloud_dev",
## 配置:主数据库链接账号
"user": "xxx",
## 配置:主数据库链接密码
"password": "xxx",
"idleTimeout": "900",
## 主数据库连接数量
"maxPool": "50",
## 配置:存入数据格式
"date_format": "yyyy-MM-dd",
## 插入数据动态sql
"insert_sql": "INSERT INTO config_article(name,category,url,push_time,create_time,article_type,preview_pictures)VALUES(<@>title<@>,<@>type<@>,<@>url<@>,<@>date<@>,now(),'1',<@>img<@>)",
## 统计数据动态sql
"count_sql": "SELECT count( id ) AS z_count FROM config_article WHERE NAME = <@>title<@> AND category = <@>type<@> AND IFNULL(url, ' ') = <@>url<@> ",
## 插入附件动态sql
"annex_sql": "INSERT INTO config_article(id,preview_pictures)VALUES(<@>id<@>,<@>img<@>)"
}
}- role配置说明:将再
新闻抓取配置节点讲解如何进行配置,已经具体配置逻辑
新闻抓取配置
新闻抓取,主要通过对被抓取站点html内容进行解析识别,抓取新闻数据,抓取支持纯链接信息、图片链接新闻两种类型;再配置抓取规则时需要实施人员根据被抓取页面进行分析抓取内容,所包含css规则,并编写相应配置文件
注意:动态js替换内容无法实现抓取。
第一步:配置抓取规则
参数说明:
- cron - 执行周期,可以访问站点https://cron.qqe2.com/进行生成配置。
- parse - 抓取规则,一个站点可以配置多个抓取规则。
- pool_name - 存储数据库源名称,取上一步配置db中数据源名称,当前配置文件为
portal。- home_url - 链接地址根地址,由于部分站点采用项目路径进行访问,可以配置该来自动评价完成路径。
- notice_type - 新闻类型,可以存储任意字符串,例如:图片新闻。
[{
// 抓取任务ID(整形数值类型、不能重复)
"id": 1,
// 抓取任务调度周期cron表达式
"cron": "0 * * * * *",
// 抓取url,如需分页,请将分页数替换成<@>curPage<@>,年份替换成<@>year<@>
"url": "http://xxgk.miit.gov.cn/gdnps/searchIndex.jsp?params=%257B%2522goPage%2522%253A<@>curPage<@>%252C%2522orderBy%2522%253A%255B%257B%2522orderBy%2522%253A%2522publishTime%2522%252C%2522reverse%2522%253Atrue%257D%252C%257B%2522orderBy%2522%253A%2522orderTime%2522%252C%2522reverse%2522%253Atrue%257D%255D%252C%2522pageSize%2522%253A10%252C%2522queryParam%2522%253A%255B%257B%257D%252C%257B%257D%252C%257B%2522shortName%2522%253A%2522fbjg%2522%252C%2522value%2522%253A%2522%252F1%252F29%252F1146295%252F1652858%252F1652930%2522%257D%255D%257D&callback=<@>callback<@>&_=1537261462936",
// 抓取任务名称
"title": "工信部",
// 抓取链接根地址
"home_url": "http://www.miit.gov.cn/",
// 抓取模式:1-普通模式、2-分页模式
"type": 2,
// 分页模式下抓取指定天数以内的内容
"grab_day": 30,
// 抓取方式,支持get、jsonp
"post_method": "jsonp",
// 抓取数据保存数据库连接名,见配置文件dbpool.properties
"pool_name": "portal_4_2",
// 解析规则
"parse": [{
// 解析方式:1-链接内容、2-图片链接内容
"type": 1,
// 保存数据中新闻类别码
"notice_type": "1",
// 抓取结果集合对应访问路径,例如:{page:1,datas:{resultMap:[{newsid:"1",title:"新闻","scrq":"2018-07-09"}]}},根据情况需抓取datas下的resultMap属性,返回新闻集合,则配置datas.resultMap
"select_root_selector": "resultMap",
// 抓取标题对应结果集的属性
"select_title_selector": "title",
// 抓取时间对应结果集的属性
"select_date_selector": "scrq",
// 抓取链接对应结果集的属性
"select_url_selector": "",
// 抓取图片对应结果集的属性
"select_img_selector": "",
// 抓取url 特殊定制
"select_url_custom": "gxb"
}]
},{
// 抓取任务ID(整形数值类型、不能重复)
"id": 2,
// 抓取任务调度周期cron表达式
"cron": "10 * * * * *",
// 抓取url,如需分页,请将分页数替换成<@>curPage<@>,年份替换成<@>year<@>
"url": "http://www.tjmec.gov.cn/info_list.jsp?classid=201707190828598801&curPage=<@>curPage<@>",
// 抓取链接根地址
"home_url": "http://www.tjmec.gov.cn/",
// 抓取任务名称
"title": "天津市教委",
// 抓取模式:1-普通模式、2-分页模式
"type": 2,
// 分页模式下抓取指定天数以内的内容
"grab_day": 180,
"parse": [{
// 解析方式:1-链接内容、2-图片链接内容
"type": 1,
// 保存数据中新闻类别码
"notice_type": "1",
// 抓取节点最外层选择器,例如:<ul><li><a href="">新闻<a></li><li><a href="">新闻2<a></li></ul>,配置ul li则将li标签设置为根节点
"select_root_selector": ".f13-w-444 table tr",
// 抓取链接选择器,基于select_root_selector设置的选择器下,例如:<ul><li><a href="">新闻<a></li><li><a href="">新闻2<a></li></ul>,配置a则抓取a 标签的参数
"select_url_selector": "a",
// 抓取url值,对应属性,不配置则读取标签内容,例如:<a href="http://baidu.com">tttt</span>,配置href则读取http://baidu.com
"select_url_attr": "href",
// 抓取标题选择器,例如:<ul><li><a href="">新闻<a></li><li><a href=""><span>新闻2</sapan></li></ul>,配置a span则抓取span标签内容
"select_title_selector": "a span",
// 抓取标题值,对应属性,不配置则读取标签内容,例如:<span title="ssss">tttt</span>,未配置则读取tttt,配置title则读取ssss
"select_title_attr": "",
// 抓取时间选择器,例如:<ul><li><a href="">新闻<a><span>(2018.09.21)</span></li></ul>,配置a span则抓取span标签内容
"select_date_selector": ".f13-w-999",
// 抓取时间,对应属性,不配置则读取标签内容,例如:<span title="ssss">tttt</span>,未配置则读取tttt,配置title则读取ssss
"select_date_attr": "",
// 抓取时间进行去除开头特殊字符,例如:(2018.09.21),配置"("则将会返回 "2018.09.21)"
"select_date_start": "(",
// 抓取时间进行去除结尾特殊字符,例如:(2018.09.21),配置")"则将会返回 "(2018.09.21"
"select_date_end": ")",
// 抓取时间进行时间日期识别,例如:2018.09.21,配置"yyyy.MM.dd"的日期规则进行日期解析
"select_date_format": "yyyy.MM.dd"
}]
}]第二步:压缩转换抓取规则为字符串
将第一步编写抓取规则,通过工具对json格式规则进行转义,可访问https://www.sojson.com/站点进行转义,转义需要整个规则json进行。
- 转义前:
[
{
"id": 2,
"cron": "0 * * * * ? *",
"url": "http://lxy.tjcu.edu.cn/index/xyxw.htm",
"title": "学院新闻",
"home_url": "http://lxy.tjcu.edu.cn/",
"type": 1,
"grab_day": 30,
"post_method": "get",
"pool_name": "portal",
"parse": [
{
"type": 1,
"notice_type": "学院新闻",
"select_root_selector": ".listUl li",
"select_url_selector": "a.c1155",
"select_url_attr": "href",
"select_title_selector": "a.c1155",
"select_title_attr": "title",
"select_date_selector": ".c1155_date",
"select_date_attr": "",
"select_date_start": "",
"select_date_end": "",
"select_date_format": "yyyy年MM月dd日"
}
]
}
]- 转以后:
"[{\"id\":2,\"cron\":\"0 * * * * ? *\",\"url\":\"http://lxy.tjcu.edu.cn/index/xyxw.htm\",\"title\":\"学院新闻\",\"home_url\":\"http://lxy.tjcu.edu.cn/\",\"type\":1,\"grab_day\":30,\"post_method\":\"get\",\"pool_name\":\"portal\",\"parse\":[{\"type\":1,\"notice_type\":\"学院新闻\",\"select_root_selector\":\".listUl li\",\"select_url_selector\":\"a.c1155\",\"select_url_attr\":\"href\",\"select_title_selector\":\"a.c1155\",\"select_title_attr\":\"title\",\"select_date_selector\":\".c1155_date\",\"select_date_attr\":\"\",\"select_date_start\":\"\",\"select_date_end\":\"\",\"select_date_format\":\"yyyy年MM月dd日\"}]}]"第三步:规则字符串
修改nacos配置文件news-dbpool.yml中role 参数。
第四步:重启抓取服务
抓取内容效验
日志效验:通过观察运行容器控制台日志,抓取任务是否存在报错。
数据库效验:访问主库的
config_article表,查看抓取新闻类型是否成功,若数据格式不正确,可以删除指定抓取数据,重新运行。
