Python爬取当前城市房源信息,以徐州为例

代码效果图请看下方,其他部分请查看附件,一起学习,谢谢

  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2020/3/18 22:23
  4. @Auth : Suk
  5. @File : 5.小猪短租相关信息.py
  6. @IDE : PyCharm
  7. @Motto: Knowing your ignorance is the best way to succeed.
  8. @Tips : 版权所有,转载,转发请注明,如有侵权请联系,谢谢.
  9. """
  10. # 小猪短租相关信息,包含出租房屋名称、地址、价格、房东、详细链接等信息
  11. # 爬取搜索页面信息,爬取5页相关内容,通过获得的详细链接页面,爬取详细页面内容
  12. import bs4
  13. import requests
  14. from bs4 import BeautifulSoup
  15. kv = {
  16. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Edg/83.0.478.45'
  17. }
  18. # format='{0:<10}\t{1:{6}<40}\t{2:{6}<10}\t{3:{6}^10}\t{4:{6}<10}\t{5:{6}<10}'
  19. format = '{0:<10}\t{1:{5}<40}\t{2:{5}<10}\t{3:{5}^30}\t{4:{5}<10}'
  20. def main():
  21. global a
  22. print('为您找到了{}条信息,您可以根据需要检索相关信息'.format(len(allInitMessage)))
  23. print('-------------------------------------------------------------------------')
  24. print(
  25. '序号 房屋名称 价格 地址 房东 ')
  26. for i in allInitMessage:
  27. # print(format.format(i[0],i[1],i[2],i[3],i[4],i[5],chr(12288)))
  28. print(format.format(i[0], i[1], i[2], i[3], i[4], chr(12288)))
  29. a = eval(input('请输入你想了解的房屋序号:'))
  30. return a
  31. def houseDetails(num):
  32. deurl = allInitMessage[num - 1][-1]
  33. detailRe = requests.get(deurl, headers=kv)
  34. sp = BeautifulSoup(detailRe.text, 'lxml')
  35. print('标题:' + sp.title.string.strip())
  36. print("价格:" + sp.find('div', class_='fl').text.strip())
  37. print("地址:" + sp.find('span', class_='pr5').text.strip())
  38. print("房东:" + sp.find('a', class_='lorder_name').text.strip())
  39. print('详细信息:')
  40. for i in sp.find('ul', class_='house_info clearfix').text.split():
  41. if ':' in i:
  42. print("\t" + i)
  43. elif "宜住" in i:
  44. print("\t" + i)
  45. print("个性描述:")
  46. for i in sp.find('div', class_='box_white clearfix detail_intro_item').text.split():
  47. if "个性描述" in i or "查看全部" in i or "收起" in i:
  48. continue
  49. else:
  50. print("\t" + i)
  51. print("内部情况:")
  52. for i in sp.find('div', class_='box_gray clearfix detail_intro_item').text.split():
  53. if "内部情况" in i or "查看全部" in i or "收起" in i:
  54. continue
  55. else:
  56. print("\t" + i)
  57. print("交通情况:")
  58. for i in sp.findAll('div', class_='info_r')[2].text.split():
  59. if "交通信息" in i or "交通情况" in i or "查看全部" in i or "收起" in i:
  60. continue
  61. else:
  62. print("\t" + i)
  63. print("周边情况:")
  64. for i in sp.findAll('div', class_='info_r')[3].text.split():
  65. if "交通信息" in i or "查看全部" in i or "收起" in i:
  66. continue
  67. else:
  68. print("\t" + i)
  69. print("配套条件:")
  70. print('\t', end="")
  71. for i in sp.findAll('div', class_='info_r')[4].children:
  72. if type(i) == bs4.element.Tag:
  73. if i.ul != None:
  74. for j in i.ul.children:
  75. if type(j) == bs4.element.Tag:
  76. if 'no' in j.get('class')[0]:
  77. continue
  78. else:
  79. print(j.text.strip() + ',', end="")
  80. print('\n' + "入住须知:")
  81. for i in sp.findAll('div', class_='info_r')[5].text.split():
  82. print('\t' + i)
  83. print("押金及其他费用")
  84. for i in sp.find('div', class_='clause_box').text.split():
  85. if "押金及其他费用" in i or "查看全部" in i or "收起" in i or ">" in i:
  86. continue
  87. elif i[-1] == ":":
  88. print("\t" + i, end="")
  89. else:
  90. print("\t" + i)
  91. try:
  92. select = input('是否返回主页面(y/n)?')
  93. if select in 'yY':
  94. main()
  95. return True
  96. if select in 'nN':
  97. print("退出成功!")
  98. return False
  99. except:
  100. print("ERROR!输入错误!")
  101. url = 'http://xuzhou.xiaozhu.com/search-duanzufang-p'
  102. allhref = []
  103. allInitMessage = []
  104. for page in range(1, eval(input('当前城市:徐州\t请输入你想检索的页数,共13页:')) + 1):
  105. lis = []
  106. hrefs = []
  107. print('\t正在检索第' + str(page) + '页')
  108. re = requests.get(url + str(page) + '-0/')
  109. soup = BeautifulSoup(re.text, 'lxml')
  110. for i in soup.find('ul', class_='pic_list clearfix list_code').children:
  111. if type(i) == bs4.element.Tag:
  112. lis.append(i.find("a"))
  113. for i in lis:
  114. if i != None:
  115. hrefs.append(i.get('href'))
  116. for i in hrefs:
  117. message = []
  118. innitMessageget = requests.get(i)
  119. innitMessage = BeautifulSoup(innitMessageget.text, 'lxml')
  120. message.append(str(len(allInitMessage) + 1) + '.')
  121. message.append(innitMessage.title.string)
  122. message.append(innitMessage.find('div', class_='fl').text.strip())
  123. message.append(innitMessage.find('span', class_='pr5').text.strip())
  124. message.append(innitMessage.find('a', class_='lorder_name').text.strip())
  125. message.append(i)
  126. allInitMessage.append(message)
  127. allhref.append(hrefs)
  128. print("\n\n\tMission Success!\n\n\n")
  129. main()
  130. while (True):
  131. bolean = houseDetails(a)
  132. if bolean == False:
  133. exit(0)
  134. else:
  135. continue

[Python] 快速爬取当前城市所有租房网站房源及配置,一目了然的更多相关文章

  1. [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息

    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫   版权声明: ...

  2. Python-定时爬取指定城市天气(一)-发送给关心的微信好友

    一.背景 上班的日子总是3点一线,家里,公司和上班的路径,对于一个特别懒得我来说,经常遇到上班路上下雨了,而我却没带伞,多么痛的领悟.最近对python有一种狂热的学习热情,写了4年多的C++代码,对 ...

  3. Python-定时爬取指定城市天气(二)-邮件提醒

    目录 一.概述 二.模块重新划分 三.优化定时任务 四.发送邮件 五.源代码 一.概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气,并发送 ...

  4. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  5. 大神:python怎么爬取js的页面

    大神:python怎么爬取js的页面 可以试试抓包看看它请求了哪些东西, 很多时候可以绕过网页直接请求后面的API 实在不行就上 selenium (selenium大法好) selenium和pha ...

  6. python连续爬取多个网页的图片分别保存到不同的文件夹

      python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  7. python定时器爬取豆瓣音乐Top榜歌名

    python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...

  8. python大规模爬取京东

    python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...

  9. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

随机推荐

  1. 02、Spring-HelloWorld

    0. 环境准备 1) jar包 jar包我会帮大家准备好的,所以不用担心找不到Jar包  链接:https://pan.baidu.com/s/1JJcYaspK07JL53vU-q-BUQ 提取码: ...

  2. PHP代码审计入门(敏感函数回溯参数过程)

    最近开始啃<代码审计企业级web代码安全架构>这本书,这一章内容看了2天很多内容都理解最主要的是对PHP不熟练所以现在理解了大概 然后进行实地环境搭建最主要的是源码百度真不好找 最后找到一 ...

  3. mysql学习笔记1(mysql的基本架构)

    mysql基本架构图 如图所示: 1 . MySQL 可以分为 Server 层和存储引擎层两部分 Server 层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖 MySQL 的大多数核心服务功 ...

  4. Macos系统上怎么自动下载任务

    相对于Windows系统来说,好用的Mac下载工具就显得比较少了.Folx作为Mac下载工具中的佼佼者,其自动化下载功能受到很多Mac系统用户的欢迎. 随着高清影视的发展,很多影视资源体动辄就是1-2 ...

  5. 如何将MathType恢复出厂设置

    必大家都知道,我们日常使用的手机是自带恢复出厂设置功能的,其实除了手机,咱们今天要说的这款公式编辑器MathType,也是可以进行恢复出厂设置操作的哦,下面就让小编给大家介绍一下吧. 一.打开Math ...

  6. Python正则表达式大全

    前言 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成 ...

  7. C语言讲义——变量的输入

    scanf("%_", &变量); 注意两点: 1.scanf的第一个参数:中只写占位符(%_),不要写别的内容(不是输出给谁看). 2.scanf的第二个参数:要加&am ...

  8. Java蓝桥杯02——第二题集锦:生日蜡烛、星期一、方格计数、猴子分香蕉

    第二题 生日蜡烛(结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填 ...

  9. Java基础教程——接口

    接口 接口只是一种约定.--Anders 接口定义了一种规范--多个类共同的公共行为规范. 对于接口的实现者--规定了必须向外提供哪些服务 对于接口的调用者--规定了可以调用哪些服务,如何调用这些服务 ...

  10. 专业五线谱作曲打谱软件Overture的常用快捷键功能大全

    快捷命令在我们使用软件时起到的帮助是不言而喻的,它用一个或几个简单的字母来代替常用的命令,使我们不用去记忆众多的长长的命令,也不必为了执行一个命令,在菜单和工具栏上寻寻觅觅.当然,随着Overture ...