网页打包exe_Python爬取链家海量二手房房产信息并打包成exe软件

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

基本开发环境

  • Python 3.6 

  • Pycharm

相关模块使用

import requests
import parsel
import csv
import concurrent.futures
import urllib

目标网页分析

90083a4dd9cd5f5ade5ea231686d1415.png

点击二手房,即可进入。

dd4992fffcfeb6580472083f685f2c47.png

看到这价格,只想说一句,真特么贵

列表页

a57d8009217568cce6075f7b99417612.png

详情页

86687279060c72496692d3cd33f9fb04.png

网页是静态数据,请求url即可获取网页源代码,然后再解析数据即可,难度不大

d66e202a923b56481822f845dbab6100.png

获取数据内容:

  • 总售价,

  • 单价,

  • 建筑面积,

  • 所在楼层,

  • 房屋朝向,

  • 房屋户型,

  • 装修情况,

  • 配备电梯,

  • 建筑结构,

  • 小区名称,

  • 交易权属,

  • 房租用途

运行效果图

db62df03ecf18277bdf0c8a514fd6f62.png

88ba59eb72f94dca450976f506ab127b.png

需要注意的点:

4014fcca24915ca97f7005e23c93eb7c.png

其实链接地址是

'https://bj.lianjia.com/ershoufang/rs%E7%8F%A0%E6%B1%9F%E7%BD%97%E9%A9%AC%E5%98%89%E5%9B%AD%E8%A5%BF%E5%8C%BA/'
  • 需要输入搜索内容需要转码

这个为例:

f590bee5d298c761e45fc4b6bee9b53b.png

如何打包成exe软件:

1、 在cmd命令行中安装 pyinstaller 模块  pip install pyinstaller

(windows键 + R 输入cmd 即可)

56661aff3c0d8c3cfb4b9428dedfc554.png

ab5213c5c353bd73928bc0d8e009d6f8.png

我这里已经是安装好的

2、打包exe ,命令 pyinstall -F xxxx.py (文件名)

  • 同样在cmd当中,先cd选择到py文件所在的路径 输入命令即可打包。

  • 在文件所在文件夹中,按住shift + 鼠标右键,选择 在此处打开Powershell窗口,进入之后输入相关命令。

为了方便我选择第二种。

af5a158e93e6f101ebc4bcfcf0360395.png

72e75509ad5b24952be176fc13e55a1a.png

391549d815c52768cbe40515156ecede.png

02e3bbd1b7e41be687ca6f8163b83f56.png

这样就打包成功了,关于打包exe 还有很多其他的内容,这里就不详聊了。

3、exe运行效果

5fb42a9266e183d52a3af0292a94eab5.png

输入想要爬取的城市、小区以及需要爬取多少页数据。

当爬取完成之后可以选择是否继续爬取。

4、可完善的地方。

  • 界面太丑了,可以选择自己写一个GUI界面。可使用TK 或者 QT

  • 可以分区域爬取,小区毕竟太少了,可以按照每个城市的区域去划分

  • 暂时没想到,欢迎大家留言讨论

Python爬取链家二手房数据,视频教程

相关代码

  • 获取网页源代码以及解析

def get_response(html_url):
    response = requests.get(url=html_url, headers=headers).text
    return response


def get_parsing(html_data):
    selector = parsel.Selector(html_data)
    return selector
  • 获取每个房源信息url

def get_page_url(page_url):
    html_data = get_response(page_url)
    selector = get_parsing(html_data)
    page_url = selector.css('.sellListContent li .title a::attr(href)').getall()
    return page_url
  • 解析网页获取相关数据

def main(url):
    lis = get_page_url(url)
    for li in lis:
        html_data = get_response(li)
        selector = get_parsing(html_data)
        title = selector.css('.main::attr(title)').get()  # 标题
        all_price = selector.css('div.price .total::text').get() + '万'  # 总价
        one_price = selector.css('div.price .unitPriceValue::text').get() + '/平米'  # 单价
        area = selector.css('div.area .mainInfo::text').get()  # 房屋面积
        floor = selector.css('#introduction .base .content ul li:nth-child(2)::text').get()  # 房屋楼层
        face = selector.css('#introduction .base .content ul li:nth-child(7)::text').get()  # 房屋朝向
        unit_type = selector.css('#introduction .base .content ul li:nth-child(1)::text').get()  # 房屋户型
        decoration = selector.css('#introduction .base .content ul li:nth-child(9)::text').get()  # 房屋装修
        elevator = selector.css('#introduction .base .content ul li:nth-child(11)::text').get()  # 电梯
        building = selector.css('#introduction .base .content ul li:nth-child(8)::text').get()  # 建筑结构
        ownership = selector.css(
            '#introduction .transaction .content ul li:nth-child(2) span:nth-child(2)::text').get()  # 交易权属
        use = selector.css(
            '#introduction .transaction .content ul li:nth-child(4) span:nth-child(2)::text').get()  # 房屋用途
        community = selector.css('.aroundInfo .communityName .info::text').get()  # 小区名称
        dit = {
            '总价': all_price,
            '单价': one_price,
            '面积': area,
            '楼层': floor,
            '朝向': face,
            '户型': unit_type,
            '装修': decoration,
            '电梯': elevator,
            '建筑结构': building,
            '交易权属': ownership,
            '房屋用途': use,
            '小区名称': community,
            '详情页地址': li,
        }
        csv_writer.writerow(dit)
        print(dit)
if __name__ == '__main__':
    while True:
        city_word = input('请输入你要搜索的城市名字(如:北京,bj):')
        key_word = input('请输入你要搜索的小区名字:')
        key_page = int(input('请输入你要爬取多少页数据:'))
        f = open('{}{}.csv'.format(city_word, key_word), mode='a', encoding='utf-8-sig', newline='')
        csv_writer = csv.DictWriter(f,
                                    fieldnames=['总价', '单价', '面积', '楼层', '朝向', '户型', '装修', '电梯', '建筑结构', '交易权属', '房屋用途',
                                                '小区名称', '详情页地址'])
        csv_writer.writeheader()
        executor = concurrent.futures.ThreadPoolExecutor(max_workers=10)
        for page in range(1, key_page + 1):
            url = 'https://{}.lianjia.com/ershoufang/pg{}rs{}/'.format(city_word, page, key_word)
            executor.submit(main, url)
        executor.shutdown()
        a = input('是否选择继续爬取(Yes or No):')
        if a == 'Yes':
            continue
        else:
            break

代码会有报错,特意留的~

给你代码只会复制粘贴运行,没有任何实际意义

关注<青灯编程> 回复 <201210链家> 即可获得 exe文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值