python 电影网站爬虫项目_python电影网站

findLink = re.compile(r’‘) # compile创建正则表达式对象,表示规则(字符串模式)
#封面图片
findImgSrc = re.compile(r’<img.src="(.?)".>‘,re.S) # re.S 忽略换行符
#电影名称
findTitle = re.compile(r’(.
)‘)
#评分
findRating = re.compile(r’(.)‘)
#评价人数
findJudge = re.compile(r’(\d)人评价‘) # \d表示数字 * 多个
#概况
findInq = re.compile(r’(.)‘)
#电影详细内容
findBd = re.compile(r’

(.?)

',re.S)

#爬取网页
def getData(baseurl):
datalist = [] # 获取地址中的数据列表,并返回
for i in range(0,10): # 调用获取页面信息的函数10次,一次25条
url = baseurl + str(i*25)
html = askURL(url) # 保存获取到的网页源码
# 2.逐一解析数据
soup = BeautifulSoup(html,“html.parser”) # html.parser网页解析器
# find_all()是按照一定的标准,将符合要求的字符串一次性查找出来形成列表
for item in soup.find_all(‘div’,class_=“item”): # class后的 _ 表示属性值
#print(item)
data = [] # 保存一部电影的所有信息
item = str(item) # 将其转为字符串
# 提取超链接 re库用来通过正则表达式找到指定的字符串 findLink是自定义的全局变量
Link = re.findall(findLink,item)[0] # [0]第一个
data.append(Link) # 将连接追加到列表中

        ImgSrc = re.findall(findImgSrc,item)[0]
        data.append(ImgSrc)

        Title = re.findall(findTitle,item) # 片名可能只有一个中文名没有外文名
        if len(Title)==2: # 判断有几个titles
            ctitle = Title[0] # 添加中文名
            data.append(ctitle)
            otitle = Title[1].replace("/","") # 去掉/
            data.append(otitle) # 添加外文名
        else:
            data.append(Title[0])
            data.append(' ') # 第二个留空

        Rating = re.findall(findRating,item)[0]
        data.append(Rating) # 添加评分

        Judge = re.findall(findJudge,item)[0]
        data.append(Judge) # 添加人数

        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中的 <br(\s+)?/>(\s+)? 替换
        Bd = re.sub('<br(\s+)?/>(\s+)?'," ",Bd)
        data.append(Bd.strip()) # strip去掉前后空格

        datalist.append(data)    #把处理好的一个电影信息存储到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/78.0.3904.116 Safari/537.36”
} #伪装成网页的形式,请求网页信息
request = urllib.request.Request(url,headers=head)
html = “” # 存放到html中
try: # 防止出现意外
response = urllib.request.urlopen(request)
html = response.read().decode(“utf-8”) # 读取response
#print(html)
except urllib.error.URLError as e: # 捕获404 500 等浏览器错误
if hasattr(e,“code”): #将其输出
print(e.code)
if hasattr(e,“reason”): # 输出没有捕获成功的原因
print(e.reason)
return html
#保存数据
def saveData(datalist,savepath):
print(“save…”)
book = xlwt.Workbook(encoding=“utf-8”,style_compression=0) # style_compression样式压缩效果
sheet = book.add_sheet(‘豆瓣电影Top250’,cell_overwrite_ok=True) #cell_overwrite_ok单元格覆盖
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]
for j in range(0,8):
sheet.write(i+1,j,data[j]) #
book.save(‘豆瓣电影Top250.xls’)

def saveData_db(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] = ‘"’+data[index]+‘"’
sql = ‘’’
insert into movie250 (
info_link, pic_link,cname,ename,score,rated,introduction,info)
values(%s) ‘’'%“,”.join(data)
cur.execute(sql)
conn.commit()
cur.close()
conn.close()

def init_db(dbpath):
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
)
‘’’
conn = sqlite3.connect(dbpath) # 创建数据库
cursor = conn.cursor() # 获取游标。获取操作的数据库对象
cursor.execute(sql) #执行sql语句
conn.commit() # 提交
conn.close() #关闭数据库文件

main()
print(“爬取完毕”)


## 然后运行代码



save…
第1条
第2条
第3条
第4条
第5条
第6条
第7条
第8条
第9条
第10条
第11条
第12条
第13条
第14条
第15条
第16条
第17条
第18条
第19条
第20条
第21条
第22条
第23条
第24条
第25条
第26条
第27条
第28条
第29条
第30条
第31条
第32条
第33条
第34条
第35条
第36条
第37条
第38条
第39条
第40条
第41条
第42条
第43条
第44条
第45条
第46条
第47条
第48条
第49条
第50条
第51条
第52条
第53条
第54条
第55条
第56条
第57条
第58条
第59条
第60条
第61条
第62条
第63条
第64条
第65条
第66条
第67条
第68条
第69条
第70条
第71条
第72条
第73条
第74条
第75条
第76条
第77条
第78条
第79条
第80条
第81条
第82条
第83条
第84条
第85条
第86条
第87条
第88条
第89条
第90条
第91条
第92条
第93条
第94条
第95条
第96条
第97条
第98条
第99条
第100条
第101条
第102条
第103条
第104条
第105条
第106条
第107条
第108条
第109条
第110条
第111条
第112条
第113条
第114条
第115条
第116条
第117条
第118条
第119条
第120条
第121条
第122条
第123条
第124条
第125条
第126条
第127条
第128条
第129条
第130条
第131条
第132条
第133条
第134条
第135条
第136条
第137条
第138条
第139条
第140条
第141条
第142条
第143条
第144条
第145条
第146条
第147条
第148条
第149条
第150条
第151条
第152条
第153条
第154条
第155条
第156条
第157条
第158条
第159条
第160条
第161条
第162条
第163条
第164条
第165条
第166条
第167条
第168条
第169条
第170条
第171条
第172条
第173条
第174条
第175条
第176条
第177条
第178条
第179条
第180条
第181条
第182条
第183条
第184条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值