此案例用简单selenium完成且重点在于解析数据
到达目标页面
通过百度搜索某猪的民宿,我们到达了目标的列表页,并记录下目标的URL
配置相关Selenium获得页面page_source
例如配置长这样
通过Xpath解析文本
例如解析这些数据
或许已经注意到了,类装饰器有itemStrip这玩意吗???答案是这玩意是我编出来的。那么它的作用是什么?
辅助Xpath的小装饰器
装饰器的代码如下:
def itemStrip(function):
def a(items):
for item in items:
for i in range(len(item)):
try:
item[i] = item[i][0]
except IndexError:
item[i] = ''
yield item
def b(*args, **kwargs):
items = function(*args, **kwargs)
striped = a(items)
return striped
return b
他的作用只是完善一下xpath寻值的操作。
在使用lxml.etree的xpath找值的时候,它返回的是一个列表。如果在《通过Xpath解析文本》这个图中,没有添加这个生成器,它返回的是一个这种格式的数据。
[[...], [...], [...], [...], [...], [...], [...], [...]]
如果不用装饰器来解决,就需要写8个这样的语句来完成
xx = ''.join(xx) if xx else ''
而套上装饰器,仅需要在使用xpath解析数据前,加上@itemStrip 就可以直接yield数据了,省去了写多个语句的功夫。装饰器对应一些重复性的工作有奇效。
最终效果
python装饰器是一个能提升效率的一个魔法方法之一。这就是关于辅助xpath解析的小装饰器的一个小案例。