0

是否有网络抓取工具或库可以自动检测重复的 HTML 块并抓取块内的文本内容,从而无需人工输入规则 - CSS 选择器或 xpath 来查找内容?

这是基于现代内容网站是由 PHP 或 Python 等服务器端语言动态生成的假设。内容几乎总是由模板中的 for 循环呈现,因此总是可以找到重复的 HTML 块。一个例子:

<div id="content">

<div class="blog entry">
    <div class="title">
        <h1>1st post</h2>
    </div>
    <div class="content">
        <p>...</p>
    </div>
</div>

<div class="blog entry">
    <div class="title">
        <h1>2nd post</h2>
    </div>
    <div class="content">
        <p>...</p>
    </div>
</div>

<div class="blog entry">
    <div class="title">
        <h1>3rd post</h2>
    </div>
    <div class="content">
        <p>...</p>
    </div>
</div>

</div>

像 bautiful soap 和 scrapy 这样的库需要人工输入规则才能进行抓取。它们不是我想要的。

4

3 回答 3

0

你可能想看看我的抓取库。它不会自动工作,也不会检测到重复的部分。但它很接近,因为它根本不需要规则,而是使用模板,您可以直接从您拥有的 html 中获取模板。

例如,在上面的示例中,读取 2 个数组中所有帖子的模板是:

 <div id="content">

 <div class="blog entry">
     <div class="title">
         <h1>{title:=.}</h1>
     </div>
     <div class="content">
         <p>{content:=.}</p>
     </div>
 </div>*


 </div>
于 2012-07-25T09:58:53.097 回答
0

没用过,但听说过scrapely

与大多数抓取库不同,Scrapely 不适用于 DOM 树或 xpath,因此它不依赖于诸如 lxml 或 libxml2 之类的库。相反,它使用了一个内部的纯 Python 解析器,它可以接受格式不正确的 HTML。HTML 被转换为一个令牌 id 数组,用于匹配要提取的项目。

Scrapely 提取基于基于实例的学习算法,并使用解析器树将匹配的项目组合成复杂的对象(它支持嵌套和重复的对象),灵感来自 A Hierarchical Approach to Wrapper Induction

于 2012-07-25T08:56:21.847 回答
0

你可以试试 HTQL:

import htql;
a=htql.Browser();

p,b=a.goUrl('http://channel9.msdn.com/Blogs/Vector/Announcing-BUILD-2012');
htql.query(p, '&html_main_text'); 

p,b=a.goUrl('http://stackoverflow.com/questions/tagged/screen-scraping');
htql.query(p, '&html_main_text'); 
于 2012-07-28T05:14:46.600 回答