getdata提取曲线数据_爬虫-链家网租金数据

dcda03a13a852eb8d1d68d92dc8bbe88.png

一、加载三方包

import urllib.request,urllib.error #制定URL,获取网页数据
from bs4 import BeautifulSoup #网页解析
import re #正则表达式
import xlwt #进行Excel操作

二、定义主函数

def main():
    baseurl = 'https://sz.lianjia.com/zufang/longhuaqu/pg'#第一个页面的网址
    datalist = getdata(baseurl)#爬取和解析的函数

    savepath = '深圳龙华区租房.xls'#给结果取个名字
    savedata(datalist,savepath)##3.保存数据的函数

三、定义爬取和解析的函数

3.1 正则化

findTarget = re.compile(r'target="_blank">(.*?)</a>',re.S)#r包涵所有的特殊符号
findI = re.compile(r'<i>/</i>(.*?)<i>/</i>',re.S) #re.S换行符包涵在字符串中
findHide = re.compile(r'<i>/</i>.*<i>/</i>.*<i>/</i>(.*?)<span class="hide"',re.S)
findApartment = re.compile(r'<i class="content__item__tag--authorization_apartment">(.*?)</i>')
findBrand = re.compile(r'<span class="brand">(.*?)</span>',re.S)
findTime = re.compile(r'<span class="content__list--item--time oneline">(.*?)</span>')
findM = re.compile(r'<span class="content__list--item-price"><em>(.*?)</em> 元/月</span>',re.S)

3.2 解析函数

def getdata(baseurl):
    datalist=[]
    for i in range(0,10): #调用10次
        url = baseurl + str(i+1)#每调用一次网址+1
        html = askURL(url) #保存获取到的网页源码

        # 逐一解析数据
        soup = BeautifulSoup(html,'html.parser')
        for item in soup.find_all('div',class_="content__list--item--main"): #查找符合要求的内容
            print(item)#测试用,看看得到的item是否符合要求

            data = []#定义一个列表临时储存得到的数据
            item = str(item)#将得到的item转换为字符串类型

            target = re.findall(findTarget,item)[0]#标题提取
            data.append(target)

            I = re.findall(findI,item)[0]#面积提取
            data.append(I)

            hide = re.findall(findHide,item)#房间数目提取
            if len(hide) != 0:
                hide = hide[0]
                data.append(hide)
            else:
                data.append(" ")

            apartment = re.findall(findApartment, item)#房屋类型提取
            if len(apartment) != 0:
                apartment = apartment[0]
                data.append(apartment)
            else:
                data.append(" ")

            brand = re.findall(findBrand, item)#品牌提取
            if len(brand) != 0:
                brand = brand[0]
                data.append(brand)
            else:
                data.append(" ")

            time = re.findall(findTime,item)#最近维护时间提取
            if len(time) != 0:
                time = time[0].replace("。","")
                data.append(time)
            else:
                data.append(" ")

            m = re.findall(findM, item)[0]#租金提取
            data.append(m)
            print(m)#测试用,看看得到的m是否符合要求,上面的每一项都可以随意加print打印看看是不是合适
            
            datalist.append(data)#将一个流程走完后的data数据导入datalist
    print(datalist)#测试用,看看datalist是否符合要求
    return datalist#返回datalist

四、定义网页获取函数

def askURL(url):
    head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
                            #使用用户代理进行爬虫伪装
    request = urllib.request.Request(url,headers=head)#获取
    html = ""
    try:
        response = urllib.request.urlopen(request)#打开
        html = response.read().decode('utf-8')#使用utf-8方式读取
        print(html)#测试用,可以看看过程,用来打印完整网页代码
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)#如果有错误,打印错误代码
        if hasattr(e, "reason"):
            print(e.reason)#如果有错误,打印错误原因

    return html

五、定义保存函数

def savedata(datalist,savepath):
    print('save...')#保存开始
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)#生成一个工作本
    sheet = book.add_sheet('深圳龙华区租房',cell_overwrite_ok=True)#生成一个excel表
    col = ('标题',"面积","房间数","房屋类型","品牌","上次维护","租金")#列名
    for i in range(0,7):
        sheet.write(0,i,col[i])#写入列名
    for i in range(0, 300):
        print("第%d条"%(i+1))#告诉我们保存到了第几条数据
        data = datalist[i]
        for j in range(0,7):
            sheet.write(i+1,j,data[j])#写入上面的到的数据
    book.save(savepath)#保存

六、调用主函数

if __name__ == '__main__': #当程序执行时调用函数
    main()
    print('爬取完成')

七、结果

7691638756bc89c0ae1a3967059a97ff.png

997ecefe5e0a64678d978419e114ab40.png

八、重点

正则化和解析函数,说难也难,说简单也简单,多试几次就会了,祝好运。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值