python爬虫 爬取团建网站所有活动项目,涉及知识(爬取、解析数据、保存excel和保存数据库SQLite)

毛毛的今天的笔记记录:爬取一个团建网站的团建活动项目数据,涉及知识比较全面,全部都封装成了函数(包含:爬抓(爬抓单个网页数据)*页数,保存数据(保存到excel和数据库SQLite),数据处理re库正则)

小结:数据库没创建了需要删除数据库再进行,不然要报错提示数据库存在,也可以将数据库创建函数在主函数(main())里面关闭。循环时一定要多测试,查看实际数据,然后在append到第一层data里,最后 append到datalist

# -*- codeing = utf-8 -*-
# @Time : 2022/9/24 0024 17:46
# @Author : 毛毛
# @File : main.py
# @Software : PyCharm
# @Function :爬取团建项目 及其 介绍

from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则表达式,进行文字匹配
import urllib.request,urllib.error #定制URL,获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作

dbpath = "tuanjian.db"
#主函数
def main():
    paquurl =  "http://www.tuanjiantong.com/kecheng_"  #一页10条数据 最后一页9条数据 共计15页(1-15)
    #savepath = ".\\团建项目.xls"
    #爬取网页
    datalist = paqu(paquurl)

    #保存数据到exl表
    #saveData(datalist, savepath)

    #保存数据到数据库
    saveDataDB(datalist,dbpath)



#申明全局变量
findTitle = re.compile(r'<dt><a href=".*>(.*?)</a></dt>')
findDescription = re.compile(r'<dd class="m_5">(.*?)</dd>')
findImage = re.compile(r'<img.*src="(.*)"/>',re.S)

#爬抓网页 + 数据处理
def paqu(paquurl):
    datalist = []
    #爬抓15页的html数据
    for i in range(1,16):                           #左闭又开,所以写16
        zuizhong_paquurl = paquurl + str(0+i) + str("/")
        html = paqu_one(zuizhong_paquurl)            # 循环 爬取一页的html
        # print(zuizhong_paquurl)
        #print(html)
        #拿到所有的 <dl class="dl13"> 标签
        soup = BeautifulSoup(html, "html.parser")

        for dl_biaoqian in soup.find_all('dl',class_="dl13"):
            #print(dl_biaoqian)
            data = []
            dl_biaoqian = str(dl_biaoqian)        #转成字符串

            title = re.findall(findTitle, dl_biaoqian)  # re库通过正则来获取指定字符串
            for ti in title:
                title = ti
            data.append(title)

            description = re.findall(findDescription,dl_biaoqian)
            for de in description:
                description = de
            data.append(description)

            imageurl = re.findall(findImage,dl_biaoqian)
            #每个url增加网站前缀http://www.tuanjiantong.com
            for im in imageurl:
                imageurl = "http://www.tuanjiantong.com" + im
            data.append(imageurl)
            # print(data)

            datalist.append(data)

    # print(datalist)
    return datalist

#爬取一个网页html
def paqu_one(paquurl):
    header = {
        "User-Agent":"Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 49.0.2623.112 Safari / 537.36"
    }
    request = urllib.request.Request(url=paquurl,headers=header)
    html = ""
    try: #捕捉异常
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    # print(html)
    return html


#保存数据的方法
def saveData(datalist, savepath):
    book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建一个Workbook对象
    sheet = book.add_sheet('团建方案01',cell_overwrite_ok=True) #创建工作表
    col = ("标题","描述","封面图地址")
    for i in range(len(col)):
        sheet.write(0,i,col[i]) #列名

    for i in range(0,149):      #149条信息
        data = datalist[i]
        for j in range(0,3):
            sheet.write(i+1,j,data[j])

    book.save(savepath)  # 保存


#保存数据到数据库
def saveDataDB(datalist,dbpath):
    con = sqlite3.connect(dbpath)
    cur = con.cursor()

    for i in range(0,149):
        data = datalist[i]
        for index in range(0,3):
            data[index] = '"' + data[index] + '"'
        sql = '''
            insert into tuanjian(
            title,description,url
            )values (%s)
        '''%",".join(data)
        #print(sql)
        cur.execute(sql)  # 执行sql
        con.commit()  # 提交到数据库
        print("写入数据库第%d"%i)

    cur.close()
    con.close() #关闭数据库



#创建数据库
def init_db(dbpath):
    conn = sqlite3.connect(dbpath)
    sql =  '''
        create table tuanjian
        (id integer primary key autoincrement ,
        title varchar ,
        description varchar ,
        url varchar); 
    '''
    cursor = conn.cursor() #获取游标
    cursor.execute(sql)
    conn.commit()
    conn.close()

if __name__ == "__main__":
    main()
    #init_db(dbpath)
    print("爬取成功了!!!!!")
如下载链接失效,请联系管理员处理【QQ:941007525,微信:style028666】

免责申明:
本站资源均来源于互联网,如有侵权请联系站长!将第一时间删除
本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
资源仅供学习参考请勿商用或其它非法用途,否则一切后果用户自负!

毛毛博客 » python爬虫 爬取团建网站所有活动项目,涉及知识(爬取、解析数据、保存excel和保存数据库SQLite)

发表回复

简简单单,不求发展

立即查看 了解详情