700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python爬虫猫眼电影TOP100(爬虫入门基础 同步入库)

python爬虫猫眼电影TOP100(爬虫入门基础 同步入库)

时间:2022-11-07 10:10:50

相关推荐

python爬虫猫眼电影TOP100(爬虫入门基础 同步入库)

小编辗转了比较长的一段时间,现在终于提笔于python的运用,这次尝试也是一个开端。

本篇文章所爬取的数据网上已经有了很多版本,并不是什么新鲜的数据,仅仅作为个人进阶的参考。

python爬虫进阶第S190811期

python爬虫将会进一步深入到JavaScript渲染网页(动态渲染)、验证码识别、代理设置、cookies池搭建等,有兴趣的同道中人可以持续关注哈。

本次尝试爬取小量电影数据并同步存入数据库作为预热哈。

下面代码分为三块:请求、解析网页的模块;网页数据获取模块;数据同步入库模块

#需要用到的包载入import requestsfrom requests.exceptions import RequestExceptionimport lxmlfrom lxml import etreeimport pymysqlimport time#定义headers,请求网页并获取网页响应状态,解析网页,设置休眠时间,防止封禁,当然如此小的数据量不存在的def main():url = '/board/4?offset='headers = {'User-Agent': 'Mozilla/5.0 (Windows NT k0.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.kk0 Safari/537.36'}for i in range(10):my_url=url+str(10*i)url_response = requests.get(my_url,headers=headers)html_analysis = etree.HTML(url_response.text)md=[]get_data(html_analysis,md)insert_sql(md)time.sleep(1)#利用lxml库xpath获取网页数据def get_data(html_analysis,md):#电影名称name=html_analysis.xpath("//div[@class='movie-item-info']/p/a/@title")#电影主演,里面的人有多个,没有进行拆分,有需要可以进行拆分actor=html_analysis.xpath("//div[@class='movie-item-info']/p[@class='star']/text()")#电影上映时间time=html_analysis.xpath("//div[@class='movie-item-info']/p[@class='releasetime']/text()")#电影评分(整数部分)score_int=html_analysis.xpath("//div[@class='board-item-content']/div[contains(@class,'movie-item-number')]/p[@class='score']/i[@class='integer']/text()")#电影评分(小数部分)score_float=html_analysis.xpath("//div[@class='board-item-content']/div[contains(@class,'movie-item-number')]/p[@class='score']/i[@class='fraction']/text()")#电影封面地址,没有下载,只是获取了地址,根据需求可以下载了存储img=html_analysis.xpath("//a/img/@src")#拼接电影评分score=[]for j in range(0,len(score_int)):score.append(score_int[j]+score_float[j])#整合每页数据,构造循环,用append函数实现for k in range(0,len(name)):movie_name=name[k].strip()movie_actor=actor[k].strip()movie_time=time[k].strip()movie_score=score[k].strip()movie_img=img[k].strip()md.append([movie_name,movie_actor,movie_time,movie_score,movie_img])#连接数据库,创建对应数据库的电影数据存储表,便于数据爬取后存入db=pymysql.connect(host='localhost', user='root', password='密码', port=3306,db='数据库')cursor = db.cursor()#创建电影数据存储表的语句用游标写,若已经存在创建的表则不会重复创建,当然这个表的参数设置是有些不合理的哈sql_create='create table if not exists my_movie_data(id int auto_increment primary key,' \'movie_name varchar(255) not null,' \'movie_actor varchar(255) not null,' \'movie_time varchar(255) not null,' \'movie_score varchar(255) not null,' \'movie_img varchar(255) not null )'cursor.execute(sql_create)db.close()#数据同步入库def insert_sql(data):db = pymysql.connect(host='localhost',user='root',password='密码',port=3306,db='数据库')cur = db.cursor()for i in data:my_data=i#用格式化符%s来避免插入数据字符拼接的问题,value值用统一的元组来传递避免出错sql = 'insert into my_movie_data(movie_name,movie_actor,movie_time,movie_score,movie_img) values(%s,%s,%s,%s,%s)'#用游标把数据同步入库,当发生错误时候便会回滚,取消错误插入try:cur.execute(sql,my_data)mit()print('猫眼电影数据正在入库')except:db.rollback()print('猫眼电影数据入库失败')cur.close()db.close()#模块调用,当name与main一致时候,在本脚本运行时候name=main,输出本脚本的结果;在其他脚本运行时候name!=main,若在其他脚本中调用模块则输出其他脚本的结果,不会执行main模块if __name__== "__main__":main()

电影数据入库(mysql)截图:

下一篇可能是猫眼电影2.8w+经典电影数据

Any questions or doubts here,call me please,together to work it out.

欢迎关注小编微信公众号:分享百科 松子

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。