前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
基本开发环境
Python 3.6
Pycharm
相关模块使用
import requests
import parsel
import csv
import concurrent.futures
import 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
可以分区域爬取,小区毕竟太少了,可以按照每个城市的区域去划分
暂时没想到,欢迎大家留言讨论
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文件