专栏名称: Python学习交流
每天更新,更新python相关的知识。希望诸君有所收获!
目录
相关文章推荐
Python开发者  ·  “李飞飞团队50 美元炼出 ... ·  昨天  
Python爱好者社区  ·  史上最强!PINN杀疯了 ·  昨天  
Python爱好者社区  ·  离谱!下载DeepSeek最高判刑20年? ·  2 天前  
Python爱好者社区  ·  多模态,杀疯了 ·  2 天前  
Python开发者  ·  请立即拿下软考证书(政策风口) ·  4 天前  
51好读  ›  专栏  ›  Python学习交流

Python爬虫:细说列表识别提取

Python学习交流  · 公众号  · Python  · 2017-12-20 16:01

正文

  • 排列规则的链接为可以列表块。

  • 列表块范围在主视图区域内为目标列表。
    先看下识别结果:

    列表识别结果图

    提取列表区域xpath宏观分成 三个大步骤

1.可疑列表区域提取

在进行可疑列表区域提取之前需要做一些预处理:因为selenium只能定位到页面上的可见元素,所以先用selenium的 find_elements_by_xpath("//a") 获取所有 可见的 ,并对定位到的元素 创建新属性canSee并赋值yeap : self.__web_driver.execute_script("arguments[0].setAttribute('can-see','yeap');", link) (其实你想属性叫什么就叫什么),然后就清洗完毕了。

接下来用lxml库的etree定位到dom树(这里将html直接说成dom树是为了后面提取最小父节点时候好理解)上 所有canSee属性是True的 标签节点 。将该节点假如列表A,以三个元素为单位扫描该列表,如下图。

可疑列表区域扫描过程示意图

Tips:

在三大步骤中, 只有这一步是在做加法,剩下的步骤基本是在过滤做减法了 ,所以尽可能的将可疑列表区域收入列表。

代码流程参考:

2.过滤不在主视图区域的可疑列表

  • 2.1 校验x轴

    在这该步骤中,校验可疑列表区域是否在主视图范围内。你需要 了解selenium的location方法,了解(x,y)坐标点在浏览器中的意义 ,在该算法中,使用 x轴中位线 作为判断依据。

    现有列表区域A,其location为(x1,y1)。列表A中,有最大链接b,其size['width']为x2。若x1+x2 > x轴中位线,则列表A在主视图范围内。

    看下图,不难理解:

  • 红线为x轴中位线

代码流程参考:

  • 2.2校验y轴

    这一步需要放在 程序最后 ,规则也比较简单,最后校验列表的 location['y'] 是否在浏览器的当前页面中 ,我认为如果你打开网页,一下看不见列表,需要往下拖才有列表,就不是我们需要的主列表了,可能是混进来奇奇怪怪的东西,逻辑比较简单就不贴代码流程了。

3.可扩展规则簇

以上步骤基本可以保证你获得一个穿过了x中位线的列表区域,但极有可能混进去一些奇奇怪怪的东西,或者漏了一些重要的东西。这时候就需要你的这些规则了,比如:







请到「今天看啥」查看全文