【从零开始学爬虫】采集丁香医生新冠问答数据


|采集简介
【场景描述】采集丁香医生网中新冠关键词下的最新医患问答数据。
【源网站介绍】丁香医生网提供问医生、查疾病、查药品、查疫苗、查检查、科普视频等信息。
【使用工具】前嗅 ForeSpider 数据采集系统,免费下载:
http://www.forenose.com/view/forespider/view/download.html
|采集网站
【入口网址】
https://dxy.com/search/questions/%E6%96%B0%E5%86%A0?page_index=1
【采集内容】
采集新冠问题的用户提问、医生回答、医生姓名、科室、医生所属医院最新基本数据。

【采集效果】如下图所示:

|思路分析
配置思路概览:

|配置步骤
1.新建采集任务
选择【采集配置】,点击任务列表右上方【+】号可新建采集任务,将采集入口地址填写在【采集地址】框中,【任务名称】自定义即可,点击下一步。

选择【抽取链接】的所有链接,勾选【翻页链接】,然后点击【完成】。

2.抽取翻页链接
①在入口页搜索选择不同页数,发现不同页数搜索结果的链接,只更换了图中红框部分,而红框部分正是经过转码后的页数,于是得出页数链接的拼接规则为:
https://dxy.com/search/questions/%E6%96%B0%E5%86%A0?page_index=页数

②在【模板抽取配置】选择频道(即任务名称),选择【脚本窗口】,将页数搜索配置在频道处即可。

③具体配置脚本如下:

④效果预览:
点击【保存】,点击【采集预览】,即可看到配置效果。

3.链接抽取
这一步是在获取的翻页链接中,提取每页全部问答链接:
①在原有模板基础上,点击按钮如下,添加列表链接抽取。

②采用地址过滤的方法来抽取表一链接,具体如下所示:
点击采集预览,先观察标题链接规律,找到规律,很明显标题链接中都包含:https://dxy.com/question/规律的数字

然后设置地址过滤,过滤包含“https://dxy.com/question/”的链接,这样就把列表链接过滤出来了。

③关联模板,点击【列表链接】抽取,关联模板 03。

4. 数据抽取
①链接抽取完成进入数据页,在原有模板基础上添加数据抽取,点击【+】后新建模板 03,然后点击【添加数据抽取】按钮。

②此时要完成数据建表的工作:
a.选择【数据建表】,点击【采集数据表结构】中的【+】,即可添加表单,名称可以自定义。

b.另外需要注意,每一个表单都需要配置主键字段,需要使用脚本的字段,在高级类型中选择脚本取值才可进行脚本操作。

c.其它字段根据实际需求配置即可,例如:questions 字段配置如下。

③将新建好的表单,关联到模板中去,如下图所示:

④填写示例地址
采集预览,复制任意一条列表链接。

⑤将链接粘贴到本模板示例地址中,并双击内置浏览器空白部分,加载本链接。

⑥需要配置哪一个字段,点击该字段,在右侧字段属性中配置即可,选择脚本配置的字段,在脚本窗口中进行代码配置。
id 字段:主键字段,采集内容选择【主键】-【网页主键】,主键为当前网页的 MD5 值。

doctorname 字段:医生姓名字段,采集内容选择【选区内可见文本】-【选区内可见文本】,选择 doctorname 按住“ctrl+鼠标左键”选择所需区域,之后点击【确认选区】。

hospitalname 字段:所属医院字段,采集内容选择【选区内可见文本】-【选区内可见文本】,选择 hostpitalname 按住“ctrl+鼠标左键”选择所需区域,之后点击【确认选区】。

department 字段:科室字段,采集内容选择【选区内可见文本】-【选区内可见文本】,选择 department 按住“ctrl+鼠标左键”选择所需区域,之后点击【确认选区】。

question 字段:问题字段是用脚本处理的。
以第一页其中一个问答为例,查看网页结构(可以使用 F12 查看,但需确认源码与 F12 内容一致)。
通过查看网页结构,发现所需要的链接全部包含在“class”类中。每个链接块对应多个“dialog”类,我们所需要的内容包含在“class”类的下一个结点“dialog theme-dark”中,“GetTextAll”获取文本的结点。


answer 字段:回答字段是用脚本处理的。
使用 F1 查看网页,发现所需要的链接全部包含在“class”类中。每个链接块对应多个“dialog”类,我们所需要的内容包含在“class”类的“dialog theme-white”下一个结点中,“GetTextAll”获取文本的结点。


⑦以上完成全部字段配置,效果预览如下:

|采集步骤
以上模板配置已完成,在采集预览没有问题后,便可以进行数据采集。
1.首先要建立采集数据表:
选择【数据建表】,点击【表单列表】中该模板的表单,在【关联数据表】中选择【创建】,表名称自定义,这里命名为 doctorQandA(注意命名不能用数字和特殊符号),点击【确定】创建完成,勾选数据表。

2.选择【数据采集】,勾选任务名称,点击【开始采集】,则正式开始采集。


3.可以在【数据浏览】中,选择数据表查看采集数据。

4.导出数据
采集结束后,可以在【数据浏览】中,选择数据表查看采集数据,并可以导出数据。

5.导出的文件打开如下图所示:

版权声明: 本文为 InfoQ 作者【前嗅大数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/35c30d74f99c787939359e8a3】。文章转载请联系作者。
评论