Python爬取猫眼电影

爬取猫眼电影中经典电影里所有电影的电影名,图片以及评分

不多说,直接上代码:
由于爬取数量较多,所以电影图片就没有下载了,爬下来的是图片的网页连接,
可以看我博客里面有篇文章是讲文件的读写操作的,包括json和pickle方式。

import requests
import re
import random
import pymysql
import time

# ------连接数据库
db = pymysql.connect(host='localhost', port=3306,
                     user='root', passwd='a', db='python', charset='utf8')
cursor=db.cursor()
sql="insert into maoyan( fname,fpic,fscore ) values( %s,%s,%s )"

#proxies={ 'http':'http://61.138.33.20.808' }   #使用代理包装一下自己
#浏览器头,同样的包装一下自己
headers={       
    'User-Agent':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
}

files=[]           #用来存储爬到的电影
timeTotal=0        #总耗时
#print(headers)
for type in range(67):
 #循环拼接地址
 r=requests.get('http://maoyan.com/films?showType=3&offset={type}'.format(type=type*30),proxies=proxies,headers=headers,verify=False)  
    #定义一个正则表达式获取需要的数据
    filemsgPattern=re.compile( 'movie-poster.*?.*?"(.*?)".*?movie-item.*?/films/.*?>(.*?).*?orange">(.*?)
',re.S ) filemsg=re.findall(filemsgPattern,r.text) print( "第 ",type,"页...,该页有电影:",len(filemsg) ) #得到的filemsg中对应的数据分别为:图片,名字以及评分 for msg in filemsg: fpic=msg[0] fname=msg[1] #这里判断是否有评分 #由于电影中有些评分项是写的无评分的,如果其长度为4则说明该电影是无评分 if len(msg[2])!=4: #如果电影无评分,继续爬取得到该电影的评分 a=re.compile('>(.*?).*?>(.*?)<',re.S) s=re.findall(a,msg[2]) for x,y in s: fscore=x+y #x为小数点左边的数,y为小数点右边的数 else: fscore=msg[2] file=[fname,fpic,fscore] files.append(file) print(file) #这里是每爬取到一百个电影做一次批量插入数据库,特点:快!减少数据库压力 if( len(files)%100==0 and len(files)!=0 ): print('已爬电影:================',len(files)) try: cursor.executemany(sql,files[-100:]) #批量插入:每爬取一百个电影信息再存入数据库 time.sleep(random.randint(1,2)) db.commit() files.clear() #数据加入数据库之后清空files except: db.rollback() #如持续爬取一个网页大量数量会被封ip的呢 times=random.randint(5, 10) #程序挂起一段时间,克制一下反爬虫机制 timeTotal+=times print("第",type,"页结束,请等待:",times,"秒...") time.sleep(times) print("爬取完成,共费时:",timeTotal) print( len(files) ) if len(files): cursor.executemany(sql,files[:len(files)]) #怕最后没有一百个电影时没执行插入 time.sleep(random.randint(1,2)) db.commit() cursor.close() db.close()

下面是开始爬取到爬取完的截图

Python爬取猫眼电影_第1张图片

Python爬取猫眼电影_第2张图片

如果执行上面代码报错,可能是那个代理ip用不了了,在西刺代理或者快代理上重新找一个可用的就行了。我博客里面有一篇是关于爬取快代理的文章

谢谢您的阅读!

你可能感兴趣的:(python,爬虫)