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)
免责申明:
本站资源均来源于互联网,如有侵权请联系站长!将第一时间删除
本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
资源仅供学习参考请勿商用或其它非法用途,否则一切后果用户自负!
毛毛博客 » python爬虫 爬取团建网站所有活动项目,涉及知识(爬取、解析数据、保存excel和保存数据库SQLite)