今天做了一个python的一个比较小的实战案例:基于链家网二手房数据解析网页并从中获取如下信息:
- 标题
- 位置
- 房屋信息
- 关注人数 / 发布时间
- 房屋总价
- 房屋单价
- 备注信息
最后调用函数的时候报错ValueError: arrays must all be same length
如下面的两张图:
原来查看了一下他们的数据长度,发现有的数据长度为30,有的数据长度为60,如下图所示:
查看其中60的数据中,发现是空格和空行占据了1/2,如下图所示:
初步解决消除空格和空行的两种方法:
#写法一:
#house_info_2 = []
#for i in house_info:
# house_info_2.append(re.sub('\s', '', i))
#写成如下形式:
house_info = html.xpath('//div[@class="info clear"]//div[@class="houseInfo"]/text()').extract()
for i in house_info:
house_info.append(re.sub('\s', '', i))
#写法二:
#house_info_2 = [re.sub('\s', '', i) for i in house_info]
#写成如下形式:
house_info1 = html.xpath('//div[@class="info clear"]//div[@class="houseInfo"]/text()').extract()
house_info = [re.sub('\s', '', i) for i in house_info1]
house_info
这种方法虽然把空格去掉了,但是有单引号单独占有的空行,长度仍为60,而其他数据的获取长度均为30
如下图所示:
再次进行修改:
#第一种——获取房屋信息
house_info = [re.sub('\s', '', i) for i in html.xpath('//li[@class="clear"]//div[@class="houseInfo"]/text()[2]').extract()]
print(len(house_info))
#第二种——获取房屋信息
house_info = [re.search(r'houseIcon"></span>(.*?)</div>', i, re.S).group(1)