电子书籍、项目源码分享。一起交流学习,一起进步!
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
基本开发环境
-
Python 3.6
-
Pycharm
相关模块使用
import requestsimport parselimport csvimport concurrent.futuresimport urllib
目标网页分析
点击二手房,即可进入。
看到这价格,只想说一句,真特么贵
列表页
详情页
网页是静态数据,请求url即可获取网页源代码,然后再解析数据即可,难度不大
获取数据内容:
-
总售价,
-
单价,
-
建筑面积,
-
所在楼层,
-
房屋朝向,
-
房屋户型,
-
装修情况,
-
配备电梯,
-
建筑结构,
-
小区名称,
-
交易权属,
-
房租用途
运行效果图
需要注意的点:
其实链接地址是
'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/'
- 需要输入搜索内容需要转码
这个为例:
如何打包成exe软件:
1、 在cmd命令行中安装 pyinstaller 模块 pip install pyinstaller
(windows键 + R 输入cmd 即可)
我这里已经是安装好的
2、打包exe ,命令 pyinstall -F xxxx.py (文件名)
-
同样在cmd当中,先cd选择到py文件所在的路径 输入命令即可打包。
-
在文件所在文件夹中,按住shift + 鼠标右键,选择 在此处打开Powershell窗口,进入之后输入相关命令。
为了方便我选择第二种。
这样就打包成功了,关于打包exe 还有很多其他的内容,这里就不详聊了。
3、exe运行效果
输入想要爬取的城市、小区以及需要爬取多少页数据。
当爬取完成之后可以选择是否继续爬取。
4、可完善的地方。
-
界面太丑了,可以选择自己写一个GUI界面。可使用TK 或者 QT
-
可以分区域爬取,小区毕竟太少了,可以按照每个城市的区域去划分
-
暂时没想到,欢迎大家留言讨论
相关代码 #给你代码只会复制粘贴运行,没有任何实际意义
- 获取网页源代码以及解析
def get_response(html_url): response = requests.get(url=html_url, headers=headers).text return responsedef 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
代码会有报错,特意留的~
#给你代码只会复制粘贴运行,没有任何实际意义
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!