更多课程 选择中心


Python培训

400-996-5531

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

  • 发布:Tony不带水
  • 来源:PythonTZXY
  • 时间:2017-12-21 16:39

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

列表块范围在主视图区域内为目标列表。

先看下识别结果:


列表识别结果图

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

1.可疑列表区域提取

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

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


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

Tips:

在整个dom树下, 同一子树同一层级的节点 才会提取最小父节点( 最小父节点:层级尽可能的小 )

重复父节点的xpath不要重复计入

有的<a>标签下取text会出现问题,最好 用xpath的string(.)方式

元素清洗时可以初步匹配明显反向特征,匹配成功直接退出

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

代码流程参考:


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中位线的列表区域,但极有可能混进去一些奇奇怪怪的东西,或者漏了一些重要的东西。这时候就需要你的这些规则了,比如:

多块列表跨x中位线

是否只是一整个列表的分块,如( #/newpage/aqbz/aqbz_gjbzgb.htm )

有或者真的是多个列表,需要过滤,如( #/shanxi/pcjgMore/601108/left.html )

识别到导航栏或者识别到滚动栏中的新闻,不需要这种东西,需要过滤

过滤规则很简单, 校验xpath中<a>的y坐标,极大值与极小值需要超过一个阀值

中央区域含有文本为更多的链接,我相信这种列表也不是我们需要的

还有后续其他的规则往上追加就好OvO

至此列表区域识别已经完成,输出值为列表区域的xpath。

本文内容转载自网络,来源/作者信息已在文章顶部表明,版权归原作者所有,如有侵权请联系我们进行删除!

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:为什么说Python是很火的编程语言,编程界的头号明星?
下一篇:小学生就学编程,就学Python,真的那么重要吗?

Python从入门到项目实战训练营开课啦!

Python语言为什么这么受人欢迎?看完这个你就知道了!

学Python去达内教育怎么样?

达内Python培训免费训练营开班啦

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省