爬取豆瓣电影top250写入sqlit
2020-06-03 05:06
405 查看
import re #正则表达式 文字匹配 from urllib import response from urllib.request import urlopen from bs4 import BeautifulSoup #网页解析 获取数据 import urllib #制定URL 获取网页数据 import xlwt #Excel import sqlite3 #豆瓣电影 #1爬取网页 2解析数据 3保存数据 def main(): baseurl="https://movie.douban.com/top250?start=" datalist=getData( baseurl) #path="C:\\Users\\lenovo\\Desktop\\豆瓣电影250.xls" #saveData(datalist,path) dbpath="豆瓣电影250.db" saveData2DB(datalist,dbpath) findLink=re.compile(r'<a href="(.*?)">') findImgSrc=re.compile(r'<img.*src="(.*?)"',re.S)#忽略换行 findTitle=re.compile(r'<span class="title">(.*)</span>') findRating=re.compile(r'span class="rating_num" property="v:average">(.*)</span>')#评分 findJudgeNum=re.compile(r'<span>(\d*)人评价</span>')#人数 findInq=re.compile(r'<span class="inq">(.*)</span>')#简介 findBd=re.compile(r'<p class="">(.*?)</p>',re.S)#主演 #爬取十页 def getData( baseurl): datalist=[] for i in range(0,10): url=baseurl+str(i*25) #1页25个 html=askURL(url) #每一页返回的数据--10部电影 #每一页逐一解析 soup=BeautifulSoup(html,"html.parser") for item in soup.find_all('div',class_="item"): #查找所有符合要求的字符串组成列表:div中,class=item data=[] #一部电影的所有信息 item=str(item) link=re.findall(findLink,item)[0] #item中符合link规则的字段 data.append(link) imgSrc=re.findall(findImgSrc,item)[0] data.append(imgSrc) titles=re.findall(findTitle,item)#可能有中文名和英文名 if(len(titles)==2): ctitle=titles[0] data.append(ctitle) otitle=titles[1].replace("/","")#去掉英文名前的/ data.append(otitle) else: data.append(titles[0]) data.append(' ')#留空外文名字 rating=re.findall(findRating,item)[0] data.append(rating) judgeNum=re.findall(findJudgeNum,item)[0] data.append(judgeNum) inq=re.findall(findInq,item) #可能为空 if len(inq)!=0: inq=inq[0].replace("。","")#去掉简介中标点符号 data.append(inq) else: data.append(" ") bd=re.findall(findBd,item)[0] bd=re.sub('<br(\s+)?'," ",bd) #去掉<br/> data.append(bd.strip()) #去掉空格 datalist.append(data) #一部电影信息放入list #print(datalist[1]) return datalist #得到一个页面的内容 def askURL(url): head={ "User-Agent": "自己补充" } request=urllib.request.Request(url,headers=head) html="" try: response=urllib.request.urlopen(request) html=response.read().decode("utf-8") #print(html) except urllib.request.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"reason"): print(e.reason) return html #保存数据excel def saveData(datalist,path): book = xlwt.Workbook(encoding="utf_8") sheet = book.add_sheet('豆瓣电影250',cell_overwrite_ok=True)#每个cell直接覆盖以前的内容 col=('电影链接','图片链接','中文名','外文名','评分','评价人数','概括','相关信息')#元组 列的信息 for i in range(0,8): sheet.write(0,i,col[i])#写入列名 for i in range(0,250): print("第%d条"%(i+1)) data=datalist[i]#第i个电影的全部信息 for j in range (0,8):#每个电影八条信息遍历保存 sheet.write(i+1,j,data[j]) book.save(path) #保存数据sql def saveData2DB(datalist,dbpath): init_db(dbpath) conn = sqlite3.connect(dbpath) cur = conn.cursor() for data in datalist: for index in range(len(data)): if index==4 or index==5: continue data[index]='"'+str(data[index])+'"'#除了评分和人数是数字格式,别的是字符串,每个信息前后加双引号才能写入数据库 sql=''' insert into movie250( info_link,pic_link, cname, ename, score, rated, introduction, info) values (%s) '''%",".join(data) #用join方法,将data填入s的位置 cur.execute(sql) conn.commit() cur.close() conn.close() def init_db(dbpath): conn = sqlite3.connect(dbpath) # 打开或创建数据库 cursor = conn.cursor() # 获取游标 sql=''' create table movie250 ( id integer primary key autoincrement, info_link text, pic_link text, cname varchar, ename varchar , score numeric , rated numeric , introduction text, info text ) ''' cursor.execute(sql) conn.commit() # 提交数据库操作 conn.close() if __name__=='__main__': main()
pycharm右侧database——豆瓣电影250——schemas——main查看数据库
或左侧
相关文章推荐
- python爬虫|爬取豆瓣电影TOP250并写入txt中
- Python爬取豆瓣top250电影数据,并导入MySQL,写入excel
- 十分钟学会十几行代码爬取豆瓣top250电影并且写入csv文件(非常简单)
- Python3爬虫豆瓣电影TOP250将电影名写入到EXCEL
- python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格
- scrapy爬取豆瓣top250电影
- 爬虫豆瓣电影top250代码和收获
- 用Python爬取豆瓣电影Top250获取电影排名、电影名称、评分、推荐语、演员、导演、年份、国家、电影类型等数据
- Python网络爬虫学习案例——爬取豆瓣电影top250信息
- scrapy爬取豆瓣TOP250电影
- 萌新的Python学习日记 - 爬虫无影 - 爬取豆瓣电影top250并入库:豆瓣电影top250
- python3爬虫豆瓣top250电影(并保存到mysql数据库)
- 利用BeautifulSoup和requests爬取豆瓣TOP250的电影名及其链接
- 豆瓣电影top250信息爬取与数据分析
- 爬取豆瓣TOP250电影的评分、评价人数、短评等信息,并在其保存在sql数据库中。
- 豆瓣电影Top250基本信息抓取
- Python-爬虫爬取豆瓣top250数据并写入csv文件
- scrapy爬取豆瓣电影top250并存储到mysql
- Scrapy爬豆瓣电影Top250并存入MySQL数据库
- Python3爬豆瓣电影详情并写入表格