Python爬取自如租房信息(价格)笔记——笨办法

爬取自如租房信息

最近正在学习python爬虫,顺便又要租房子,于是就想爬去自如上的租房信息顺便来联系一下。

·掉进价格的大坑里

在爬取过程中一切都听顺利的,可是到了最关键的房租部分就遇到了问题。居然是一张图片,每次加载一个随机顺序数字的图片,之后从这张图片根据像素截取出来数字之后显示价格。
房价
在找到随机生成的图片后发现后面跟着一串列表,这些数字对应着真实的价格。
Python爬取自如租房信息(价格)笔记——笨办法_第1张图片
生成的随机图片长这样。。。
在这里插入图片描述
之后就跑去翻了很多大佬的文章,发现大家都遇到了这个坑。而且很多人也提供了自己的解决思路,但是大部分是要调用图片转文字的API。对于我这个菜鸟来说,听着就觉得很麻烦(调用免费API的使用次数少的可怜)。

·寻找出路

为了愉快的解决现在的问题,我决定自己想一想别的出路。前一段时间有点沉迷基于CNN的图片分类,自己慢慢照着大神的代码写了一个皮卡丘和妙蛙种子的分类器,结果直到现在还没有解决过拟合的问题。不过这个坑先放在一边,将图片输入CNN时,是将图片转换成一个numpy的数组,然后再进行分类训练。既然这样,就可以将每个数字的数组都记录下来,之后再合爬去网页中新生成的图片对比,得到图片的随机数列,之后再根据之前找到的列表来确定每间房子的价格(我这只弱鸡总是喜欢想一些复杂的方法呀哈哈 )。
这是我随便找来的一张图片,保存在本地作为标准。
test001.npg
测试图片就用刚才的那一张图。
在这里插入图片描述
不废话直接上代码。。。

from PIL import Image
import numpy as np
import requests as req
from io import BytesIO

def read_image(imageName):
    im = Image.open(imageName).convert('RGB')
    data = np.array(im)
    return data

def read_image_url(img_url):
    response = req.get('http://'+img_url)
    im = Image.open(BytesIO(response.content)).convert('RGB')
    data = np.array(im)
    return data

def get_num(n):
    l_num = []
    m = 0
    x = n
    while True:
        if m < 9:
            x0,x1, = np.split(x, [30],axis = 1)
            l_num.append(x0)
            x = x1
            m+=1
            continue
        else:
            l_num.append(x)
            break
    return l_num

def get_0_9():
    l_num = get_num(read_image('test001.png'))
    x2,x4,x3,x6,x8,x5,x1,x9,x0,x7 = l_num
    list_num = [x0,x1,x2,x3,x4,x5,x6,x7,x8,x9]
    return list_num

def get_num_list(png):
    l = []
    list_num = get_0_9()
    l_num_test = get_num(read_image_url(png))
    for i in range(0,10):
        for w in range(0,10):
            if (l_num_test[i] == list_num[w]).all():
                l.append(w)
                #print(w)
                break
    #print (l)
    return l

·之后的工作

这样就得到了随机生成图片的数字列表,在根据之前的得到的,图片中索引的列表,就可以知道每间房子的租金了。
这是最终的成果。。。
Python爬取自如租房信息(价格)笔记——笨办法_第2张图片

你可能感兴趣的:(python学习笔记)