#导入需要用到的模块

import requests

import pymysql

import time

from bs4 import BeautifulSoup

import tkinter as tk

import xlwt

import importlib,sys

importlib.reload(sys)

from PIL import Image,ImageTk

#背景图片

def resize( w_box, h_box, pil_image):

"""调整图片大小,适应窗体大小"""

"""arg:: w_box:new width h_box:new height pil_image:img"""

w, h = pil_image.size #获取图像的原始大小

f1 = 1.0*w_box/w

f2 = 1.0*h_box/h

factor = min([f1, f2])

width = int(w*factor)

height = int(h*factor)

return pil_image.resize((width, height), Image.ANTIALIAS)

#获取url下的页面内容,返回soup对象

def get_page(url):

responce = requests.get(url)

soup = BeautifulSoup(responce.text,'html.parser')

return soup

#封装成函数,作用是获取列表页下面的所有租房页面的链接,返回一个连接列表

def get_links(link_url):

soup = get_page(link_url)

links_div = soup.find_all('div',class_="pic-panel")

links = [div.a.get('href') for div in links_div]

return links

def get_house_info(house_url):

soup = get_page(house_url)

price = soup.find('span',class_='total').text #价格

unit = soup.find('span',class_='unit').text.strip() #单位 strip()函数去空格

house_info = soup.find_all('p')

area = house_info[0].text[3:] #面积

layout = house_info[1].text[5:] #户型

floor = house_info[2].text[3:] #楼层

towards = house_info[3].text[5:] #朝向

subway = house_info[4].text[3:] #地铁

uptown = house_info[5].text[3:-8].strip() #小区

location = house_info[6].text[3:] #位置

info ={

'价格':price,

'单位':unit,

'面积':area,

'户型':layout,

'楼层':floor,

'朝向':towards,

'地铁':subway,

'小区':uptown,

'位置':location

}

return info

DATABASE = {

'host':'localhost',#如果是远程数据库,此处为远程服务器的ip地址

'database':'examination',

'user':'root',

'password':'123456',

'charset':'utf8mb4'

}

def get_db(setting):

return pymysql.connect(**setting)

def insert(db,house):

table_name=cityEntry.get()+'_'+localEntry.get()

values = "'{}',"* 8 +"'{}'"

sql_values = values.format(house['价格'],house['单位'],house['面积'],house['户型'],

house['楼层'],house['朝向'],house['地铁'],house['小区'],

house['位置'])

sql = """

insert into {0}(price,unit,area,layout,floor,towards,subway,uptown,location)

values({1})

""".format(table_name,sql_values)

cursor = db.cursor()

cursor.execute(sql)

db.commit()

def creatTable(db):

table_name=cityEntry.get()+'_'+localEntry.get()

sql = """

CREATE TABLE `{}` (

`price` varchar(80) DEFAULT NULL,

`unit` varchar(80) DEFAULT NULL,

`area` varchar(80) DEFAULT NULL,

`layout` varchar(80) DEFAULT NULL,

`floor` varchar(80) DEFAULT NULL,

`towards` varchar(80) DEFAULT NULL,

`subway` varchar(80) DEFAULT NULL,

`uptown` varchar(80) DEFAULT NULL,

`location` varchar(80) DEFAULT NULL

);""".format(table_name)

cursor = db.cursor()

cursor.execute(sql)

db.commit()

def main():

db = get_db(DATABASE)

try:

creatTable(db)

except:

print("数据库已存在")

pass

num = int(numberEntry.get())

for i in range(num):

links = get_links("https://"+dict_loc['{}'.format(cityEntry.get())]+".lianjia.com/zufang/"+dict_loc['{}'.format(localEntry.get())]+"/pg{}/".format(i))

for link in links:

time.sleep(0.1)

house = get_house_info(link)

insert(db,house)

lableInit.config(text="{}市{}区数据获取成功".format(cityEntry.get(),localEntry.get()))

print('DONE')

def quitw():

top.destroy()

def export():

db = get_db(DATABASE)

cursor = db.cursor()

table_name=cityEntry.get()+'_'+localEntry.get()

count = cursor.execute('select * from '+table_name)

# 重置游标的位置

cursor.scroll(0,mode='absolute')

# 搜取所有结果

results = cursor.fetchall()

# 获取MYSQL里面的数据字段名称

fields = cursor.description

workbook = xlwt.Workbook()

sheet = workbook.add_sheet('table_'+table_name,cell_overwrite_ok=True)

# 写上字段信息

for field in range(0,len(fields)):

sheet.write(0,field,fields[field][0])

# 获取并写入数据段信息

row = 1

col = 0

for row in range(1,len(results)+1):

for col in range(0,len(fields)):

sheet.write(row,col,u'%s'%results[row-1][col])

workbook.save(r'C:\Users\Lenovo\Desktop\{}.xls'.format(table_name))

lableInit.config(text="共{}条数据导出成功!".format(count))

#构造字典

dict_loc = {

'北京':'bj',

'东城':'dongcheng',

'西城':'xicheng',

'朝阳':'chaoyang',

'海淀':'haidian',

'丰台':'fengtai',

'上海':'sh',

'浦东':'pudong',

'宝山':'baoshan',

'杭州':'hz',

'西湖':'xihu',

'下城':'xiacheng',

'余杭':'yuhang',

'富阳':'fuyang',

'郑州':'zz',

'金水':'jinshui',

'中原':'zhongyuan',

'二七':'erqi',

'高新':'gaoxin',

'新郑市':'xinzhengshi',

'洛阳':'luoyang',

'嵩县':'songxian',

'新乡':'xinxiang',

'牧野':'muye'

}

if __name__ == "__main__":

top = tk.Tk()

top.title("链家")

top.resizable(width=False,height=False)#设置不可拉伸

top.geometry("410x510") #设置窗口大小

#添加背景图片

canvas = tk.Canvas(top) #设置canvas

pil_image = Image.open('lianjiabg2.png') #打开背景图片

pil_image_resize = resize(410,510,pil_image) #将它放大保存

im = ImageTk.PhotoImage(pil_image_resize)

canvas.create_image(205,255,image = im) #将图片加载到canvas来

canvas.place(x=0,y=0,height=510,width=410,anchor='nw')#放到屏幕当中

#图片

photo = tk.PhotoImage(file="F:\CodeWorkspace\lianjia.png")

imgLabel = tk.Label(top,image=photo,bg='#fbfbfb',width=410)

imgLabel.grid(row=0,column=0,columnspan=2)

#lable

Label = tk.Label(top,fg='#589e6e',bg='#f9f7ba',font = '隶书 -20 ', text = "请输入您要查询的地区")

Label.grid(row=1,column=0,columnspan=2,pady=5)

#市

cityEntry = tk.Entry(top,width=12)

cityEntry.grid(row=2,column=0,padx=5,pady=10,sticky="E")

cityLabel = tk.Label(top,fg='#589e6e',font = '隶书 -20 ',bg='#d9f3e1', text = "市")

cityLabel.grid(row=2,column=1,sticky="W")

#区

localEntry = tk.Entry(top,width=12)

localEntry.grid(row=3,column=0,padx=5,pady=10,sticky="E")

localLabel = tk.Label(top,fg='#589e6e',font = '隶书 -20 ',bg='#d9f3e1', text = "区")

localLabel.grid(row=3,column=1,sticky="W")

#lable2

Label2 = tk.Label(top,fg='#589e6e',bg='#f9f7ba',font = '隶书 -20 ', text = "请输入您要查询的页数\n(每页30条数据)")

Label2.grid(row=4,column=0,columnspan=2)

#信息数

numberEntry = tk.Entry(top,width=12)

numberEntry.grid(row=5,column=0,padx=5,pady=10,sticky="E")

numberLabel = tk.Label(top,fg='#589e6e',font = '隶书 -20 ',bg='#abe1c1', text = "页")

numberLabel.grid(row=5,column=1,sticky="W")

#提交

submit = tk.Button(top,bg='#589e6e',fg='white',width=12,height=1,font = 'Helvetica -15 bold', text="数据获取",command=main)

submit.grid(row=6,column=0,columnspan=2,padx=3,pady=5)

#lable3

Label3 = tk.Label(top,fg='#589e6e',bg='#f9f7ba',font = '隶书 -20 ', text = "将数据导出为Excel格式")

Label3.grid(row=7,column=0,columnspan=2)

#导出excel

export = tk.Button(top,bg='#f9a33f',fg='white',width=12,height=1,font = 'Helvetica -15 bold', text="导出数据",command=export)

export.grid(row=8,column=0,columnspan=2,padx=3,pady=5)

#退出

quitB = tk.Button(top,bg='#ff5757',fg='white',width=12,height=1,font = 'Helvetica -15 bold', text="退出",command=quitw)

quitB.grid(row=9,column=0,columnspan=2,padx=3,pady=3)

#反馈

lableInitTitle = tk.Label(top,font = '正楷 -12',text="* * * 提 示 信 息 * * *",width=40,fg="#f9a33f")

lableInitTitle.grid(row=10,column=0,columnspan=2,ipady=5)

lableInit = tk.Label(top,bg='#d9f3e1',font = '正楷 -12 ',text="请在上方输入您要查询的信息",width=40,fg="red")

lableInit.grid(row=11,column=0,columnspan=2,ipady=5)

链家爬虫python_python爬虫-链家租房信息获取相关推荐

  1. python爬虫--小猪短租的租房信息

    python爬虫--小猪短租的租房信息 利用requests获取网页 利用Beautifulsoup4和lxml解析网页 具体代码如下 from bs4 import BeautifulSoup im ...

  2. 一个简单的爬虫——收集安居客上海租房信息

    Part 1: 2016年8月13号晚开始写第三个爬虫小程序(安居客),至8月14号中午完成编写并运行成功. 项目源码:https://github.com/carlblocking/xxw-for- ...

  3. 基于jsoup的java爬虫-爬取豆瓣小组租房信息

    主要框架为springboot+mybatis+jsoup jsoup官方文档:https://www.open-open.com/jsoup/ 爬取的豆瓣网址为:https://www.douban ...

  4. python 爬虫抓取19楼租房信息

    查看19lou.com的Cookie chrome中打开19lou.com,按F12可以打开开发者工具查看 不获取Cookie会导致爬取网站时重定向而抓不到内容 定义headers headers = ...

  5. 爬虫爬取赶集网租房信息

    一.爬虫–scrapy 1.搭建环境 代码如下(示例): import scrapy import numpy as np import pandas as pd import matplotlib. ...

  6. python爬虫爬取58同城租房信息(使用动态IP)输出Excel文件

    python爬虫爬取58同城信息(使用动态IP) 新手,为了做一个数据分析,搞了几天,终于搞出来了,大家可以给点意见啊. # coding=utf-8 import sys import csv im ...

  7. 腾讯爬虫python_Python爬虫,爬取腾讯漫画实战

    先上个爬取的结果图 最后的结果为每部漫画按章节保存 运行环境 IDE VS2019 Python3.7 先上代码,代码非常简短,包含空行也才50行,多亏了python强大的库 importosimpo ...

  8. 微信朋友圈爬虫python_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。...

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一时间就发过反对 996 的文章 哎- 不过也好 ...

  9. 爬取链家网站的北京租房信息

    本来准备这个暑假好好复习,但学校安排暑期实践,既然学校安排这个,而且我自己也觉得需要提高一下自己的能力,所以静下心来做点事吧.我们要做到项目是分析北京地区的租房的信息分析. 我们需要做的是爬取链家网站 ...

  10. python爬取豆瓣租房信息

    文章目录 任务描述 完整代码 运行结果 任务描述 使用python爬虫,实现获取豆瓣"北京租房"的租房信息,并筛选适合个人的房源存入Excel.使用方法都写在注释里了,请认真阅读哦 ...

最新文章

  1. c#sdf数据库连接_如何连接并处理 sdf 数据库文件(便捷数据库处理)
  2. Kafka性能强于RabbitMQ的原因
  3. 第一学期《计算机网络》作业一_新学期学习计划合集5篇-其他范文
  4. hbase里面命令行删除_HBase实践 | HBase疑难杂症诊治
  5. python之sqlalchemy的使用
  6. Unity —Spine动画
  7. windows驱动加载顺序
  8. 96道前端面试题+前端常用算法
  9. 警告 C4819 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
  10. 李宏毅机器学习课程自测练习题
  11. 02_Python算法+数据结构笔记-冒泡排序-选择排序-插入排序-快排-二叉树
  12. frp服务实现内网穿透SSH远程内网虚拟机
  13. 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐
  14. php中的 notice,PHP中出现Notice: Undefined index的三种解决办法
  15. java博客论坛设计报告,javaweb课程设计报告-个人博客网站的实现(Java).doc
  16. AE鱼眼镜头畸变扭曲修复插件:RevisionFX RELens for Mac
  17. lua游戏脚本开发之叉叉集成开发环境使用教程与配置【如何连接模拟器】
  18. Windows 7 如何开启休眠
  19. 【数学原理】抛物线插值
  20. SpringBoot学生成绩管理系统

热门文章

  1. android项目epub格式电子书开源开发
  2. 论坛报名 | DataFunCon:用户画像论坛
  3. linux设置搜狗输入法,Ubuntu系统安装和使用搜狗输入法
  4. win10应用商店不见了
  5. 访问页面出错:The requested URL / was not found on this server. 网站打开出现404
  6. SaaS商城是什么,赢利点在哪儿?
  7. GitLab CI/CD Pipeline 与 jobs的概念
  8. php过滤只匹配中英文字符串
  9. jupyter扩展插件Nbextensions使用
  10. MD5 JS实现加密