import openpyxl         # 导入处理excel文件用到的库
import requests         # 导入requests 请求库
from lxml import etree  # 导入lxml解析库
import pymysql

def main(baseurl):
    """
    1.爬取网页
    2.逐一解析
    3.保存数据
    :return:
    """
    print("START爬取楼盘")
    # baseurl = "https://cd.fang.lianjia.com/loupan/"
    num = int(input("需爬页数:"))
    datalist = getdata(baseurl, num)    #用下面的getdata函数爬取网页返回数据给datalist
    #   保存数据
    savepath = "a.xlsx"     #设置数据上传到aEXCEL
    savedata(datalist, savepath)    #调用下面写的保存数据到excel的函数
    savedatadb(datalist)
    print("OK!")    #函数成功调用保存之后输出ok

def getdata(baseurl, num):
    datalist = []
    x = [str(i) for i in range(1, num+1)]  # 字符串类的数字序列,用于拼接网址
    global name    # 用于拼接网址
    name = str(input("请输入查找的相关内容:"))  # 用于拼接网址
    for i in range(0, num):
        # https://cd.fang.lianjia.com/loupan/pg2rs1
        # 爬取网页
        url = baseurl + "pg" + x[i] + "rs" + name
        print(url)
        resp = requests.get(url)    #使用get()方法抓取网页信息
        # print(resp.text)

#用etree.HTML来解析这个网页的结构,最后通过xpath获取自己所需的内容
        html = etree.HTML(resp.text)

# 获取网页信息
        divs = html.xpath("/html/body/div[3]/ul[2]/li")
        # 大界面路径
        for div in divs:
            # 每个小项
            data = []
            title = div.xpath("./div/div[1]/a/text()")[0]
            # 小区名称标题
            data.append(title)
            #位置信息
            post1 = div.xpath("./div/div[2]/span[1]/text()")[0]
            post2 = div.xpath("./div/div[2]/span[2]/text()")[0]
            post3 = div.xpath("./div/div[2]/a/text()")[0]
            post = (post1.strip() + "的" + post2 + "的" + post3)  # 位置
            data.append(post)
            # 简介信息
            info1 = div.xpath("./div/div[5]/span[1]/text()")[0]
            info2 = div.xpath("./div/div[5]/span[2]/text()")[0]
            info3 = div.xpath("./div/div[5]/span[3]/text()")[0]
            info4 = div.xpath("./div/div[5]/span[4]/text()")[0]
            info = (info1 + "," +info2 + "," +info3 + "," + info4)
            data.append(info)
            # 价格信息
            price = div.xpath("./div/div[6]/div[1]/span[1]/text()")[0]#价格
            price = (price + "元/㎡")
            data.append(price)
            #价格信息
            #将所有数据给到datalist列表
            datalist.append(data)

print("得到数据个数为: ", len(datalist))
    return datalist

# 得到指定网页信息
def askurl(url):
    #  模拟浏览器头部信息
    head = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
    }
    resp = requests.get(url, headers=head)     # 请求
    html = etree.HTML(resp.text)   # 解析
    resp.close()
    # 关掉爬虫链接
    return html
    # 返回得到的html代码

# 保存到excel
def savedata(datalist, savepath):
    """
    将解析后的数据保存在Excel文件中
    :param datalist: 网页解析后的数据
    :param savepath: Excel文件保存路径
    :return:
    """

wk = openpyxl.load_workbook(savepath)
    sheets = wk.sheetnames
    # 获取sheet中所有表名
    flag = 0
    # 0 标志无同名,1 标志有同名
    for i in sheets:
        # 循环整个表名
        if i == name:
            flag = 1
    if flag == 1:
        del wk[name]
        # 删除sheet,在创建,清空sheet内容
    wk.create_sheet(title=str(name), index=0)
    # 新的sheet
    sheet = wk[name]
    col = ('序号', '小区名称', '位置', '简介信息', '价格')
    sheet.append(col)
    for i in range(0, len(datalist)):
        data = datalist[i]
        # 这一行的内容
        sheet.cell(i+2, 1).value = i+1
        # 序号
        for j in range(0, len(data)):
            sheet.cell(i + 2, j + 2).value = data[j]
            # 第一行为内容,第一列为序列号
    wk.save(savepath)
    print("成功保存入excel")

#保存到数据库
def savedatadb(datalist):
    """
    :return:
    """
    # 初始化数据库
    init_DB()
    # 连接数据库
    conn = pymysql.connect(
        host='localhost',
        user='root',
        password='',
        port=3306,
        db='re',
        charset='utf8',
    )
    cur = conn.cursor()  # 获取游标
    # 将数据逐一保存到数据库
    sql1 = '''insert into `%s`''' % name
    for data in datalist:
        for index in range(len(data)):
            data[index] = '"' + data[index] + '"'
        sql2 = '''(`title`,`post`, `info`, `price`) value(%s);''' % (", ".join(data))
        sql = sql1 + sql2
        print(sql)
        cur.execute(sql)                            # 数据执行
        conn.commit()                               # 数据提交
    cur.close()                                     # 关闭游标
    conn.close()                                    # 关闭连接
    print("保存数据库成功")

# 初始化数据库
def init_DB():
    """
    初始化数据库
    :return:
    """
    # 若不加if not exists,则每次运行程序需要先删除database;否则不用先删除,但无法更新sql里的格式
    # 各种数据,sql事务
    sql1 = '''DROP TABLE IF EXISTS `%s`;''' % name
    sql2 = '''
CREATE TABLE IF NOT EXISTS `%s` (
  `id` int(4) primary key not null auto_increment,
  `title` text default NULL,
  `post` text default NULL,
  `info` text default NULL,
  `price` text default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ''' % name
    # 连接数据库
    conn = pymysql.connect(
        host='localhost',
        user='root',
        password='',
        port=3306,
        db='re',
        charset='utf8',
    )
    # 获取光标
    cursor = conn.cursor()
    try:
        cursor.execute(sql1)  # 执行sql语句,如果存在表则删除表然后创建Mysql
        cursor.execute(sql2)  # 执行sql语句
        conn.commit()  # 提交
        print("数据库初始化成功")
    except Exception as e:
        print(e)
        conn.rollback()  # 确保数据库操作的原子性问题,多次操作要么都执行,要么都不执行,回滚
        print("数据库初始化数据失败")
    finally:
        cursor.close()  # 关闭游标
        conn.close()  # 关闭

if __name__ == "__main__":
    # 调用函数
    main("https://cd.fang.lianjia.com/loupan/")

利用PYHTON爬虫爬取恋家网房价相关推荐

  1. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  2. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...

    [爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...

  3. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  4. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  5. [python爬虫]爬取天气网全国所有县市的天气数据

    [python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...

  6. 利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!

    首先我准备利用mysql来存储我爬取的信息,建一个host表如下: 然后下载pymysql ,利用它与数据库链接,因为在这里我只涉及到写入的操作: Unit_Mtsql 然后就是使用Beautiful ...

  7. Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息

    XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...

  8. python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)

    爬取链家房价信息(未完待续) items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # ...

  9. [Python爬虫]爬取东方财富网公司公告需要注意的几个问题

    在上一篇文章中,以爬取东方财富网公司公告为例,介绍了如何爬取利用ajax加载的网页,以及如何模拟翻页.但是,在实际应用的过程中,发现了一些问题.接下来就来一一分析解决. 问题一.公告数量过多,后面的公 ...

最新文章

  1. (无奈之举)2011年01月26号日志
  2. 关于DateTime对象序列化为Json之后的若干问题
  3. 基于Spark ML 聚类分析实战的KMeans
  4. Linux-鸟菜-6-文件与目录管理
  5. 浅析Web2.0技术
  6. Apache Mahout:构建垃圾邮件过滤器服务器
  7. 神牛笔记:吉林大学ACM总结(fennec)
  8. CSS之Responsive网页设计的三个特性
  9. [转载] python 中的时间,日期,时间戳互相转换
  10. Visual Studio 2019报错:缺少mfc120.dll
  11. phpstrom自己定义和原本的常用快捷键
  12. 学生表,选课表,课程表
  13. windows 使用docker构建镜像
  14. 微信小程序-云支付那些事儿
  15. kali linux win10桌面,一键伪装成Win 10,Kali Linux 2019年最终版重磅功能预览
  16. 华为linux不识别U盘启动,华为电脑如何用u盘启动不了怎么办
  17. 机器学习(1)-项目 0: 预测泰坦尼克号乘客生还率
  18. Win10下用Strokeit的方法
  19. 从零搭建hyperf docker镜像
  20. java赋值运算的类型转换出新的问题_Java中byte、short、char、int、long运算时自动类型转化问题...

热门文章

  1. OCR之:Pytesseract端到端文字识别(包含源代码以及极为详细的解释)
  2. 数据分析36计(25):微软开源 DoWhy 之因果分析快速入门
  3. 理光Ricoh MP C3504exSP 一体机驱动
  4. ubuntu连接投影仪
  5. NAS存储人人影视安装使用教程
  6. 利用两个线程验证 ++ 操作是非原子性的
  7. 电脑xp系统坏了,如何重装系统
  8. 远程计算机或设备不接受连接
  9. oracle数据库系统登陆,系统验证登陆Oracle数据库
  10. android基础题型