`

从零学爬虫:采集房天下二手房信息

阅读更多

l 采集网站

【场景描述】采集房天下最新二手房信息。

【入口网址】tj.esf.fang.com/

【采集内容】

采集天津市房天下,二手房模块中的所有二手房的标题、价格、户型、面积、单价、朝向、楼层、装修、小区、区域、联系人、电话。

l 思路分析

配置思路概览:

l 配置步骤

1. 新建采集任务

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

2.翻页配置

获取二手房页面中全部翻页链接,观察翻页链接规律发现:

tj.esf.fang.com/house/i 第二页链接

tj.esf.fang.com/house/i 第三页链接

tj.esf.fang.com/house/i 第四页链接

不难发现,翻页链接组成为:

tj.esf.fang.com/house/i页数+/

①故添加脚本如下:

②采集预览

3.链接抽取

①新建模板二,并新建一个链接抽取,用来抽取每个翻页中所有二手房链接。

②列表链接需要脚本配置,操作如下图所示:

③查看页面源码,打开浏览器中该页面,点击F12,点击指针按钮,如下图所示,用指针按钮选中所需要的二手房链接,这时在右侧出现对应源码内容。说明链接在class为【shop_list shop_list_4】的节点下。

④经过观察发现,我们要找的是【shop_list shop_list_4】节点下每一个名为【dl】的节点对应一个二手房信息。

每个【dl】节点中的名为【dd】节点的子节点的子节点的href就是该二手房的链接。

⑤根据以上思路,具体配置脚本如下,配置好脚本后点击右上角【保存】。

文本如下:

var foor = DOM.FindClass("shop_list shop_list_4","div",0 );//找到class为shop_list shop_list_4的节点
var foora= DOM.FindName("dl",foora );//找到foor节点下名为dl的节点
while(foora)//如果是foora节点
{
	url link;//定义一个url
	var pro = DOM.FindName("dd",foora );	//找到foora节点下name为dd的节点
	link.urlname= url.StdUrl(URL.urlname,pro.child.child.href);//输出链接为pro节点的子节点的子节点的href
	link.title =pro.child.child.title;//输出链接标题为pro节点的子节点的子节点的title
	link.tmplid = 3;//关联模板2
	RESULT.AddLink(link);//结果输出一条链接
	foora = foora.next;//跳到foora节点的下一个节点,即下一个【class=listtxt】的节点
}

⑥采集预览如下所示:

2. 数据抽取

①链接抽取完成进入数据页,在原有模板基础上,右键选择【添加模板】,新添加的模板,右键【添加数据抽取】。

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

③数据表配置完成,选择【数据抽取】右侧数据属性配置,表单选择刚建立的“房天下”数据表,则可看到表单中的字段在左侧显示。

④点击脚本窗口,选择数据抽取脚本

⑤观察所需字段在页面中的位置,浏览器打开任意一个二手房详情页,点击F12,点击指针按钮,如下图所示,用指针按钮选中所需要的二手房字段信息,这时在右侧出现对应源码内容。

name_字段:如下图所示可知,本字段在class为【floatl tit_details】的节点下。

price字段:如下图所示可知,本字段在class为【trl-item price_esf sty1】的节点下。

type_字段:如下图所示可知,本字段在class为【tr-line clearfix】节点的子节点下。

area字段:如下图所示可知,本字段在class为【trl-item1 w182】节点的子节点下。

priceper字段:同理在class为【trl-item1 w132】节点的子节点下。

orientation字段:同理在class为【trl-item1 w146】节点的子节点下。

floor字段:虽然本字段在class为【trl-item1 w182】节点的子节点下,但是如下图所示,本页源码中不只一个trl-item1 w182,所以不能用同上述几个字段一样的方法来获取。

如下图所示,通过页面源码观察可发现,本字段在class为【tab-cont-right】的节点的子节点的下一个的下一个的下一个节点中的class为【trl-item1 w182】的节点中。

Renovate字段:由图可知,本字段在class为【tr-line clearfix】的节点下的class为【trl-item1 w132】的子节点中。

Estate字段:由图可知,本字段在class为【tr-line】的节点下的class为【rcont】的节点中的所有文本。

zone_字段:由图可知,本字段在class为【trl-item2 clearfix】的节点下的class为【rcont】的节点中的所有文本。

name_字段:由图可知,本字段在class为【zf_jjname】的节点中的所有文本内容。

Tel字段:由图可知,本字段为classid为【AgentTel】的字段中的value属性值。

⑥综上所述,数据抽取脚本如下所示:

脚本文本:

var floor=DOM.FindClass("tab-cont-right","div");
var floor1=floor.child.next.next.next;
var floor2=DOM.FindClass("tr-line","div");
var floor3=DOM.FindClass("trl-item2 clearfix","div").next;
var floor4=DOM.FindClass("zf_chat_line","a");
record re;
re.id = MD5(ur);
re.title = DOM.GetTextAll(DOM.FindClass("floatl tit_details","h1"));
re.price=DOM.GetTextAll(DOM.FindClass("trl-item price_esf  sty1","div",0));
re.type_=DOM.GetTextAll(DOM.FindClass("tr-line clearfix","div",0).child);
re.area=DOM.GetTextAll(DOM.FindClass("trl-item1 w182","div").child);
re.priceper=DOM.GetTextAll(DOM.FindClass("trl-item1 w132","div").child);
re.orientation=DOM.GetTextAll(DOM.FindClass("trl-item1 w146","div").child);
re.floor=DOM.GetTextAll(DOM.FindClass("trl-item1 w182","div",floor1));
re.renovate=DOM.GetTextAll(DOM.FindClass("trl-item1 w132","div",floor1).child);
re.estate=DOM.GetTextAll(DOM.FindClass("rcont","div",floor2));
re.zone_=DOM.GetTextAll(DOM.FindClass("rcont","div",floor3));
re.name_=DOM.GetTextAll(DOM.FindClass("zf_jjname","span"));
re.tel=DOM.FindId("AgentTel").value;
RESULT.AddRec(re,this.schemaid);

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

l 采集步骤

模板配置完成,采集预览没有问题后,可以进行数据采集。

①首先要建立采集数据表:

选择【数据建表】,点击【表单列表】中该模板的表单,在【关联数据表】中选择【创建】,表名称自定义,这里命名为fangtianxia(注意命名不能用数字和特殊符号),点击【确定】。

创建完成,勾选数据表。

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

③可以在【数据浏览】中,选择数据表查看采集数据,并可以导出数据。

l 课后回顾

FindClass(class名,标签类型,开始查找结点):当符合条件的class名称唯一时,使用class名来查找结点。

FindName(标签名,开始查找结点):当查找范围内,符合条件的数据标签唯一时,可以使用标签名称查找标签结点。

GetTextAll(需要获取文本的结点,使用的字符编码):获取该html标签节点及所有子节点的可见文本。

Child:孩子频道节点。

FindId(idVal):通过标签的ID属性值查找标签节点,其中idVal表示待查找标签ID属性值。

 

在操作中如有问题,可进入前嗅官网(forenose.com),咨询技术支持。

前嗅免费提供一对一技术支持服务。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics