[Python] 快速爬取当前城市所有租房网站房源及配置,一目了然
Python爬取当前城市房源信息,以徐州为例
代码效果图请看下方,其他部分请查看附件,一起学习,谢谢
- # -*- coding: utf-8 -*-
- """
- @Time : 2020/3/18 22:23
- @Auth : Suk
- @File : 5.小猪短租相关信息.py
- @IDE : PyCharm
- @Motto: Knowing your ignorance is the best way to succeed.
- @Tips : 版权所有,转载,转发请注明,如有侵权请联系,谢谢.
- """
- # 小猪短租相关信息,包含出租房屋名称、地址、价格、房东、详细链接等信息
- # 爬取搜索页面信息,爬取5页相关内容,通过获得的详细链接页面,爬取详细页面内容
- import bs4
- import requests
- from bs4 import BeautifulSoup
- kv = {
- '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'
- }
- # format='{0:<10}\t{1:{6}<40}\t{2:{6}<10}\t{3:{6}^10}\t{4:{6}<10}\t{5:{6}<10}'
- format = '{0:<10}\t{1:{5}<40}\t{2:{5}<10}\t{3:{5}^30}\t{4:{5}<10}'
- def main():
- global a
- print('为您找到了{}条信息,您可以根据需要检索相关信息'.format(len(allInitMessage)))
- print('-------------------------------------------------------------------------')
- print(
- '序号 房屋名称 价格 地址 房东 ')
- for i in allInitMessage:
- # print(format.format(i[0],i[1],i[2],i[3],i[4],i[5],chr(12288)))
- print(format.format(i[0], i[1], i[2], i[3], i[4], chr(12288)))
- a = eval(input('请输入你想了解的房屋序号:'))
- return a
- def houseDetails(num):
- deurl = allInitMessage[num - 1][-1]
- detailRe = requests.get(deurl, headers=kv)
- sp = BeautifulSoup(detailRe.text, 'lxml')
- print('标题:' + sp.title.string.strip())
- print("价格:" + sp.find('div', class_='fl').text.strip())
- print("地址:" + sp.find('span', class_='pr5').text.strip())
- print("房东:" + sp.find('a', class_='lorder_name').text.strip())
- print('详细信息:')
- for i in sp.find('ul', class_='house_info clearfix').text.split():
- if ':' in i:
- print("\t" + i)
- elif "宜住" in i:
- print("\t" + i)
- print("个性描述:")
- for i in sp.find('div', class_='box_white clearfix detail_intro_item').text.split():
- if "个性描述" in i or "查看全部" in i or "收起" in i:
- continue
- else:
- print("\t" + i)
- print("内部情况:")
- for i in sp.find('div', class_='box_gray clearfix detail_intro_item').text.split():
- if "内部情况" in i or "查看全部" in i or "收起" in i:
- continue
- else:
- print("\t" + i)
- print("交通情况:")
- for i in sp.findAll('div', class_='info_r')[2].text.split():
- if "交通信息" in i or "交通情况" in i or "查看全部" in i or "收起" in i:
- continue
- else:
- print("\t" + i)
- print("周边情况:")
- for i in sp.findAll('div', class_='info_r')[3].text.split():
- if "交通信息" in i or "查看全部" in i or "收起" in i:
- continue
- else:
- print("\t" + i)
- print("配套条件:")
- print('\t', end="")
- for i in sp.findAll('div', class_='info_r')[4].children:
- if type(i) == bs4.element.Tag:
- if i.ul != None:
- for j in i.ul.children:
- if type(j) == bs4.element.Tag:
- if 'no' in j.get('class')[0]:
- continue
- else:
- print(j.text.strip() + ',', end="")
- print('\n' + "入住须知:")
- for i in sp.findAll('div', class_='info_r')[5].text.split():
- print('\t' + i)
- print("押金及其他费用")
- for i in sp.find('div', class_='clause_box').text.split():
- if "押金及其他费用" in i or "查看全部" in i or "收起" in i or ">" in i:
- continue
- elif i[-1] == ":":
- print("\t" + i, end="")
- else:
- print("\t" + i)
- try:
- select = input('是否返回主页面(y/n)?')
- if select in 'yY':
- main()
- return True
- if select in 'nN':
- print("退出成功!")
- return False
- except:
- print("ERROR!输入错误!")
- url = 'http://xuzhou.xiaozhu.com/search-duanzufang-p'
- allhref = []
- allInitMessage = []
- for page in range(1, eval(input('当前城市:徐州\t请输入你想检索的页数,共13页:')) + 1):
- lis = []
- hrefs = []
- print('\t正在检索第' + str(page) + '页')
- re = requests.get(url + str(page) + '-0/')
- soup = BeautifulSoup(re.text, 'lxml')
- for i in soup.find('ul', class_='pic_list clearfix list_code').children:
- if type(i) == bs4.element.Tag:
- lis.append(i.find("a"))
- for i in lis:
- if i != None:
- hrefs.append(i.get('href'))
- for i in hrefs:
- message = []
- innitMessageget = requests.get(i)
- innitMessage = BeautifulSoup(innitMessageget.text, 'lxml')
- message.append(str(len(allInitMessage) + 1) + '.')
- message.append(innitMessage.title.string)
- message.append(innitMessage.find('div', class_='fl').text.strip())
- message.append(innitMessage.find('span', class_='pr5').text.strip())
- message.append(innitMessage.find('a', class_='lorder_name').text.strip())
- message.append(i)
- allInitMessage.append(message)
- allhref.append(hrefs)
- print("\n\n\tMission Success!\n\n\n")
- main()
- while (True):
- bolean = houseDetails(a)
- if bolean == False:
- exit(0)
- else:
- continue

[Python] 快速爬取当前城市所有租房网站房源及配置,一目了然的更多相关文章
- [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息
[Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫 版权声明: ...
- Python-定时爬取指定城市天气(一)-发送给关心的微信好友
一.背景 上班的日子总是3点一线,家里,公司和上班的路径,对于一个特别懒得我来说,经常遇到上班路上下雨了,而我却没带伞,多么痛的领悟.最近对python有一种狂热的学习热情,写了4年多的C++代码,对 ...
- Python-定时爬取指定城市天气(二)-邮件提醒
目录 一.概述 二.模块重新划分 三.优化定时任务 四.发送邮件 五.源代码 一.概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气,并发送 ...
- 使用Python爬虫爬取网络美女图片
代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...
- 大神:python怎么爬取js的页面
大神:python怎么爬取js的页面 可以试试抓包看看它请求了哪些东西, 很多时候可以绕过网页直接请求后面的API 实在不行就上 selenium (selenium大法好) selenium和pha ...
- python连续爬取多个网页的图片分别保存到不同的文件夹
python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...
- python定时器爬取豆瓣音乐Top榜歌名
python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...
- python大规模爬取京东
python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...
- Python爬虫 - 爬取百度html代码前200行
Python爬虫 - 爬取百度html代码前200行 - 改进版, 增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...
随机推荐
- MathType如何对齐公式
作为强大的公式编辑器,MathType为我们的学习.工作带来了极大的便利.比如在写论文时,有了它,就可以轻松就把论文里的公式码完:老师在编写试卷时,利用它,可以快速编写出一份试卷.那么在编写公式时,也 ...
- Camtasia中对录制视频进行编辑——音效
市场上有很多的视频处理软件,形形色色的软件往往会使人眼花缭乱,而对于那些短视频的制作者来说,拥有一款好的视频处理软件会让自己的视频收获更多的点赞.那么今天我便给大家推荐一款同时具有录屏和编辑视频功能的 ...
- Mac垃圾忘记清理?开启自动清理提醒帮助你!
Mac系统被广泛应用于各种职场生活和学习生活上,平时由于工作和学习忙碌,用户难免会忽略了对Mac的照料,Mac在日复一日地使用中,必定会逐渐变得"臃肿",系统中存在着各种文件缓存垃 ...
- PDF文档工具:pdfFactory快照功能详解
pdfFactory的快照功能,是通过一种类似截图的方式,将文档中的内容,如标题.图片.段落.文字等进行剪切的功能.剪切后的内容会转化为文本框的形式,我们可以对其进行加边框.旋转等编辑处理,但不能对其 ...
- 人人都能学会系列之ThreadLocal
1.概览 本文我们来看下java.lang包中的ThreadLocal,它赋予我们给每个线程存储自己数据的能力. 2.ThreadLocal API ThreadLocal允许我们存储的数据只能被特定 ...
- java编写规范及注意事项
java编写规范及注意事项 1.注释 常见注释有三种 // /**/ /****/ 如何才能写出漂亮的注释呢,注释的目的就是为了使你的代码让人更容易理解和维护,写一手好的注释是一个优秀码农的基本 ...
- centos xargs
有些时候过滤后的东西需要传递给后面其它命令执行实现需求,这个时候xargs就派上用场了. 比如我想把过滤后的东东拷贝至其它目录,其实我可以进入那个目录然后执行ls,然后是过滤,接着再手工以拷贝那样也可 ...
- Android多触点总结
文章部分内容参考: http://blog.csdn.net/barryhappy/article/details/7392326 总结: 1. event.getX()可以得到x的坐标,里面的参数0 ...
- HPSocket介绍与使用
一.HPSocket介绍 HP-Socket是一套通用的高性能TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的TCP/UDP/HTTP通信系 ...
- Sharding-JDBC分片策略详解(二)
一.分片策略 https://shardingsphere.apache.org/document/current/cn/features/sharding/concept/sharding/ Sha ...