Python爬取租房信息并保存至Excel文件

Python爬取租房信息并保存至Excel文件


本案例为Python编写Spider程序,获取租房相关信息,并保存至Excel文件。大致分为爬取网页、解析数据、保存数据三个步骤,程序具有通用性,只需获取目标网站URL地址,然后返回HTML文本内容,再根据匹配规则筛选需要的数据,最后保存数据即可。

  • 导入需要用到的包
from bs4 import BeautifulSoup       # 网页解析,获取数据
import re       # 正则表达式,进行文字匹配
import urllib.request       # 指定URL,获取网页数据
import urllib.error     # 指定URL,获取网页数据
import xlwt     # 进行Excel操作
import time     # 设置间隔爬取

爬取网页

# 爬取网页
def getData(baseurl):
    print("爬取中...")
    datalist = []
    for i in range(1, 35):
        # time.sleep(3)
        url = baseurl + str(i)
        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)
            # print(item)       # 打印一个item,方便查找匹配规则
            # break     # 查找到第一个item后退出循环
            link = 'https://sh.lianjia.com' + re.findall(findLink, item)[0]  # re库用来通过正则表达式查找指定的字符串
            data.append(link)
            street = re.findall(findStreet, item)[0]
            data.append(street)
            area = re.findall(findArea, item)[0]
            data.append(area)
            size = re.findall(findSize, item)[0]
            data.append(size.strip())
            price = re.findall(findPrice, item)[0]
            data.append(price)
            orientation = re.findall(findOrientation, item)[0]
            data.append(orientation)
            layout = re.findall(findLayout, item)[0]
            data.append(layout.strip())
            datalist.append(data)
            # print('https://sh.lianjia.com'+link)
        print(datalist)
    return datalist


# 得到指定的一个URL的网页内容
def askURL(url):
    head = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 99.0.4844.51Safari / 537.36"
    }
    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("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


解析数据

findLink = re.compile(r'<a class="twoline" href="(.*?)" target="_blank">', re.S)  # 创建正则表达式对象,表示规则(字符串的模式)
findStreet = re.compile(r'</a>-<a href=".*target="_blank">(.*?)</a>-', re.S)
findArea = re.compile(r' title="(.*?)">', re.S)
findSize = re.compile(r'<i>/</i>(.*?)<i>/</i>', re.S)
findPrice = re.compile(r'<em>(.*?)</em>', re.S)
findOrientation = re.compile(r'        <i>/</i>(.*?)        <i>/</i>', re.S)
findLayout = re.compile(r'        <i>/</i>.*        <i>/</i>(.*?)        <span', re.S)

保存数据

# 保存数据
def saveData(datalist, savepath):
    print("Save...")
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook对象
    sheet = book.add_sheet('静安区租房信息', cell_overwrite_ok=True)  # 创建工作表
    col = ("链接", "街道", "小区", "面积", "价格", "朝向", "户型")
    for i in range(0, 7):
        sheet.write(0, i, col[i])  # 列名
    for i in range(0, 1020):
        print("第%d条" % (i + 1))
        data = datalist[i]
        for j in range(0, 7):
            sheet.write(i + 1, j, data[j])  # 数据
    book.save(savepath)  # 保存


  • 14
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值