scrapy 一种不需要设置规则就能自动查找文本内容的Web抓取工具或库

44u64gxh  于 2023-03-08  发布在  其他
关注(0)|答案(4)|浏览(103)

是否有一个Web抓取工具或库,可以自动检测重复的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和scrappy这样的库都是靠人输入规则才能进行刮取的,它们不是我想要的。

aiqt4smr

aiqt4smr1#

没有使用过,但听说过scrapely
与大多数抓取库不同,Scrapely不使用DOM树或xpath,因此它不依赖于lxml或libxml 2等库,而是使用一个内部的pure-python解析器,该解析器可以接受格式较差的HTML,HTML被转换为一个令牌id数组,用于匹配要提取的项。
Scrapely提取基于基于示例学习算法,匹配的项目被组合成复杂对象(它支持嵌套和重复对象),使用解析器树,受AHierarchicalApproachtoWrapper归纳的启发

wi3ka0sx

wi3ka0sx2#

你可能想看看我的scraping library,它不是自动工作的,也不会检测重复的部分,但它很接近,因为它根本不需要规则,而是使用模板,你可以直接从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>
u7up0aaq

u7up0aaq3#

您可以尝试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');
qgzx9mmu

qgzx9mmu4#

PyDepta可能会有帮助,它可以从HTML页面中提取结构化数据,并在无监督模式下工作。

相关问题