小学妹刚毕业没地方住想来借宿,于是我连夜用Python给她找了个好房子,我真是太机智了

这篇具有很好参考价值的文章主要介绍了小学妹刚毕业没地方住想来借宿,于是我连夜用Python给她找了个好房子,我真是太机智了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事情是这样的,小学妹刚毕业参加工作,人生地不熟的,因为就在我附近上班,所以想找我借宿。。。

想什么呢,都不给住宿费,想免费住?于是我用Python连夜给她找了个单间,自己去住吧!

小学妹刚毕业没地方住想来借宿,于是我连夜用Python给她找了个好房子,我真是太机智了

软件环境

Python 3.8

Pycharm

代码展示

模块

# 数据请求模块 --> 第三方模块, 需要安装 pip install requests
import requests
# 解析数据模块 --> 第三方模块, 需要安装 pip install parsel
import parsel
# csv模块
import csv

创建文件

f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '小区',
    '区域',
    '售价',
    '单价',
    '户型',
    '面积',
    '朝向',
    '装修',
    '楼层',
    '年份',
    '建筑类型',
    '详情页',
])
csv_writer.writeheader()

发送请求, 模拟浏览器 对于 url地址 发送请求

模拟浏览器

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}

请求网址/网站

url = 'https://cs.***.com/ershoufang/'

发送请求

response = requests.get(url=url, headers=headers)
# <Response [200]> 响应对象 200 状态码 表示请求成功
print(response)

获取数据, 获取网页源代码 <获取服务器返回响应数据>

解析数据, 提取我们想要的数据内容

解析方法:

  • re: 对于字符串数据直接进行解析提取

  • css: 根据标签属性提取数据内容

  • xpath: 根据标签节点提取数据内容

使用css: 根据标签属性提取数据内容

把获取到html字符串数据, 转成可解析对象

selector = parsel.Selector(response.text)

获取所有房源信息所在li标签

lis = selector.css('.sellListContent li.clear')

for循环遍历

for li in lis:
    """
    提取具体房源信息: 标题 / 价格 / 位置 / 户型...
    .title a --> 表示定位class类名为title下面a标签
    """
    title = li.css('.title a::text').get()  # 标题
    info_list = li.css('.positionInfo a::text').getall()
    area = info_list[0]  # 小区名字
    area_1 = info_list[1]  # 地区
    totalPrice = li.css('.totalPrice span::text').get()  # 售价
    unitPrice = li.css('.unitPrice span::text').get().replace('元/平', '').replace(',', '')  # 单价
    houseInfo = li.css('.houseInfo::text').get().split(' | ')  # 信息
    houseType = houseInfo[0]  # 户型
    houseArea = houseInfo[1].replace('平米', '')  # 面积
    houseFace = houseInfo[2]  # 朝向
    fitment = houseInfo[3]  # 装修
    fool = houseInfo[4]  # 楼层

    if len(houseInfo) == 7 and '年' in houseInfo[5]:
        year = houseInfo[5].replace('年建', '')
    else:
        year = ''
    house = houseInfo[-1]  # 建筑类型
    href = li.css('.title a::attr(href)').get()  # 详情页
    dit = {
        '标题': title,
        '小区': area,
        '区域': area_1,
        '售价': totalPrice,
        '单价': unitPrice,
        '户型': houseType,
        '面积': houseArea,
        '朝向': houseFace,
        '装修': fitment,
        '楼层': fool,
        '年份': year,
        '建筑类型': house,
        '详情页': href,
    }
    csv_writer.writerow(dit)
    print(dit)
    # print(title, area, area_1, totalPrice, unitPrice, houseType, houseArea, houseFace, fitment, fool, year, house, href)

多线程

导入模块

import requests
import parsel
import re
import csv
# 线程池模块
import concurrent.futures
import time

发送请求函数

def get_response(html_url):

:param html_url:
:return:
"""
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
response = requests.get(url=html_url, headers=headers)
return response

获取数据函数

def get_content(html_url):
    """
    :param html_url:
    :return:
    """
    response = get_response(html_url)
    html_data = get_response(link).text
    selector = parsel.Selector(response.text)
    select = parsel.Selector(html_data)
    lis = selector.css('.sellListContent li')
    content_list = []
    for li in lis:

        title = li.css('.title a::text').get()  # 标题
        area = '-'.join(li.css('.positionInfo a::text').getall())  # 小区
        Price = li.css('.totalPrice span::text').get()  # 总价
        Price_1 = li.css('.unitPrice span::text').get().replace('元/平', '')  # 单价
        houseInfo = li.css('.houseInfo::text').get()  # 信息
        HouseType = houseInfo.split(' | ')[0]  # 户型
        HouseArea = houseInfo.split(' | ')[1].replace('平米', '')  # 面积
        direction = houseInfo.split(' | ')[2].replace(' ', '')  # 朝向
        renovation = houseInfo.split(' | ')[3]  # 装修
        floor_info = houseInfo.split(' | ')[4]
        floor = floor_info[:3]  # 楼层
        floor_num = re.findall('(\d+)层', floor_info)[0]  # 层数
        BuildingType = houseInfo.split(' | ')[-1]
        string = select.css('.comments div:nth-child(7) .comment_text::text').get()
        href = li.css('.title a::attr(href)').get()  # 详情页
        if len(houseInfo.split(' | ')) == 6:
            date = 'None'
        else:
            date = houseInfo.split(' | ')[5].replace('年建', '')  # 日期
        print(string)
        dit = {
            '标题': title,
            '内容': string,
            '小区': area,
            '总价': Price,
            '单价': Price_1,
            '户型': HouseType,
            '面积': HouseArea,
            '朝向': direction,
            '装修': renovation,
            '楼层': floor,
            '层数': floor_num,
            '建筑日期': date,
            '建筑类型': BuildingType,
            '详情页': href,
        }
        content_list.append(dit)
    return content_list

主函数

def main(page):
    """
    :param page:
    :return:
    """
    print(f'===============正在采集第{page}页的数据内容===============')
    url = f'https:///ershoufang/yuelu/p{page}/'
    content_list = get_content(html_url=url)
    for content in content_list:
        csv_writer.writerow(content)


if __name__ == '__main__':
    time_1 = time.time()
    link = 'http://******/article/149'
    # 创建文件
    f = open('data多线程.csv', mode='a', encoding='utf-8', newline='')
    csv_writer = csv.DictWriter(f, fieldnames=[
        '标题',
        '内容',
        '小区',
        '总价',
        '单价',
        '户型',
        '面积',
        '朝向',
        '装修',
        '楼层',
        '层数',
        '建筑日期',
        '建筑类型',
        '详情页',
    ])
    csv_writer.writeheader()

    # 线程池执行器 max_workers 最大线程数
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    for page in range(1, 11):
        exe.submit(main, page)
    exe.shutdown()
    time_2 = time.time()
    use_time = int(time_2 - time_1)
    # 总计耗时: 9
    print('总计耗时:', use_time)

最后

好了,今天分享就到这里,我要假装不在家,不然小学妹又来找我!文章来源地址https://www.toymoban.com/news/detail-449615.html

到了这里,关于小学妹刚毕业没地方住想来借宿,于是我连夜用Python给她找了个好房子,我真是太机智了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 听说小破站新上一批“高质量”的视频,于是怀揣着“学习”的目的,我用Python将他们全部采集了下来

    事情是这样的,昨晚室友悄咪咪的拉着我去他的电脑,说带我欣赏一点高雅的作品,于是这一坐下,便是一晚上… 作为一个乐于分享的博主,本来我是决定直接分享的,但是转念一想,授人以鱼不如授人以渔,我还是直接出教程方便大家以后遇到了喜欢的,也能及时下载保存

    2024年02月06日
    浏览(43)
  • 小学生python游戏编程4----拼图游戏

    主要内容是设计开发一个趣味拼图游戏,其功能是对加载的图片进行分割(如分割5×5矩阵或其他类型矩阵),上篇文章讲了,具体可看小学生python游戏编程3----拼图游戏-准备(https://blog.csdn.net/fqfq123456/article/details/127173684),把分隔的图片加载到游戏界面,随机打乱顺序,用户

    2023年04月10日
    浏览(40)
  • 使用python语解决一个小学数学题----鸡兔同笼问题

    问: 鸡(chicken)和兔子(rabbit)被关进一只笼子里,已知头(head)一共有40个,腿(leg)一共有120个,请问笼子里有几只鸡,几只兔子? [root@localhost /]# vim 1.py 编辑: head = 40 leg = 120 for chicken in range(0,head): rabbit = head - chicken if chicken * 2 + rabbit * 4 == 120: print chicken print rabbit [

    2023年04月08日
    浏览(37)
  • 2023年NOC大赛加码未来编程赛道-初赛-Python(小学高年级组-卷1)

    2023年NOC大赛加码未来编程赛道-初赛-Python(小学高年级组-卷1) *1.表达式len(\\\"学史明理增信 ,读史终生受益\\\")len(\\\"reading history willbenefit you\\\")的结果是? () OA.0 O B. True O c. False OD.1 *2.表达式(21)==False的结果是? 0 A.None ) B.True C.Error D. False *3.在Python中,type()函数用于查看对象的数据类型,

    2024年02月04日
    浏览(37)
  • 机器学习——python训练CNN模型实战(傻瓜式教学,小学生都可以学会)代码开源

    ​ 第一章 python训练线性模型实战 第二章 python训练决策树模型实战 第三章 python训练神经网络模型实战 第四章 python训练支持向量机模型实战 第五章 python训练贝叶斯分类器模型实战 第六章 python训练集成学习模型实战 第七章 python训练聚类模型实战 第八章 python训练KNN模

    2024年02月04日
    浏览(54)
  • 关于国家中小学智慧教育平台登录和退出的Python-Webdriver-Selenium代码

    登录和退出过程中用到的知识有:1网页元素的定位(用了八种方法中的四种:XPATH,TAG_NAME,ID,CLASSNAME);2输入文本;3点击元素;4嵌套网页的跳转;5在确定网页元素时用到了浏览器开发者工具(F12)。

    2024年02月14日
    浏览(70)
  • 【Python&GIS】面矢量数据投影转换(WGS84转地方坐标系)

            之前分享过点矢量怎么进行投影转换,今天跟大家分享下面矢量如何投影转换。代码与之前的类似,只要注意一下GDAL对矢量文件划分的关系层次即可。         ogr库是一个处理地理空间矢量数据的开源库。它可以读取多种数据格式,进行地理处理、属性表操作、

    2024年02月14日
    浏览(41)
  • 入职外包四个月,我连夜跑路

    有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂的“命”。他们就是大厂的“外包员工”。 外包公司的特点有哪些

    2024年03月23日
    浏览(41)
  • 旅游有哪些好玩的地方? 今天用python分析适合年轻人的旅游攻略

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 “旅”是旅行,外出,即为了实现某一目的而在空间上从甲地到乙地的行进过程; “游”是外出游览、观光、娱乐,即为达到这些目的所作的旅行。 二者合起来即旅游。所以,旅游不但有“行”,且有观光、娱乐含义。 知识点

    2024年02月07日
    浏览(55)
  • 人生不能重来,于是有了电影

    人生不能重来,于是有了电影🎬,2020年对于我来说是特殊的年份,由于疫情公司受到严重打击,我所属的行业与我背道而驰,就这样,我失业了,从没想过,会因为这个原因而离开一家自己喜欢的公司。 消沉了一段时间,翻遍了所有经典的电影来看,试图重新找回那个充满

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包