使用eweb4j 框架中的爬虫系统,抓不到数据的问题

宁浩 发布于 2013/04/17 14:17
阅读 364
收藏 0
<site name="discuzt" url="http://www.discuzt.com/discuzcode-db.html" reqDelay="1s" enable="1" charset="gbk"
          schedule="1h" thread="2" waitQueue="10s">
        <queueRules policy="and">
            <rule type="!regex" value="^.*\.(jpg|png|gif)$"/>
        </queueRules>

        <targets>
            <target name="article" isForceUseXmlParser="1">
                <urlRules policy="and">
                    <rule type="equal" value="http://www.discuzt.com/discuzcode-db.html">
                    </rule>
                </urlRules>

                <model>
                    <field name="content" isArray="1" isAlsoParseInNextPage="1" isTrim="1">
                        <parsers>
                            <parser xpath="//div[@class='box_a1']/h1/text()" exp="$output($this)"/>
                            <!--attribute 黑名单-->
                            <parser exp="$Tags.xml($this).rm('span').ok()"/>
                        </parsers>
                    </field>
                </model>
            </target>
        </targets>
这是我的配置文件.要抓取的html结构如下:
<div class="box_a1">
    <h1 class="title_1 cl"><span class="egtitle"> </span>pre_common_admincp_cmenu - 后台菜单收藏表</h1>
<div class="boxf_1">title => '菜单名称'<br>
url => '菜单地址'<br>
sort => '0' COMMENT '菜单类型,备用'<br>
displayorder => '显示顺序'<br>
clicks => '1' COMMENT '点击数,备用'<br>
uid => '添加用户'<br>
dateline => '添加时间'<br>
</div>
</div>
为什么我会抓不到数据呢?求指教。。。。
加载中
0
自风
自风

分析了下你要抓取的html页面结构。

1.<div class="box_a1"> 这个div就是你要的一个个条目



2.上述div里的h1和<div class="boxf_1">就是你要的title和content

映射到Spiderman的配置是:<model><field name="title" 和 <field name="content"

================================================
再分析你写的配置,发现几处"不应该"

<parser xpath="//div[@class='box_a1']/h1/text()" exp="$output($this)"/>
1.很明显你的XPath获取到的是一段文本内容,而不是一个Dom节点,因此无需后面的exp表达式来输出xml,此处配置要去掉

<parser exp="$Tags.xml($this).rm('span').ok()"/>
2.同1,你获取的是纯文本内容,不是待html标签的内容,因此无需进行标签过滤,此处配置要去掉


3.最后,结合你的需求,最终的配置如下:

<target name="dic">
	<urlRules policy="and">
		<rule type="equal" value="http://www.discuzt.com/discuzcode-db.html" />
	</urlRules>
	<model isArray="1" xpath="//div[@class='box_a1']">
		<field name="title">
			<parsers>
				<parser xpath="h1/text()"/>
			</parsers>
		</field>
		<field name="content">
			<parsers>
				<parser xpath="div[@class='boxf_1']/text()" />
			</parsers>
		</field>
	</model>
</target>
附上抓取到的数据预览图:


0
宁浩
宁浩
恩,谢谢!!按照你的配置修改后果然抓到数据了.看来eweb4j我还要深入研究一番了
返回顶部
顶部