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

系统 1778 0

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

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

python爬虫进阶第S190811期

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

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

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

            
              #需要用到的包载入
import requests
from  requests.exceptions  import RequestException
import lxml
from lxml import etree
import pymysql
import time



#定义headers,请求网页并获取网页响应状态,解析网页,设置休眠时间,防止封禁,当然如此小的数据量不存在的
def main():
    url = 'http://maoyan.com/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)
            db.commit()
            print('猫眼电影数据正在入库')
        except:
                db.rollback()
                print('猫眼电影数据入库失败')
    cur.close()
    db.close()

#模块调用,当name与main一致时候,在本脚本运行时候name=main,输出本脚本的结果;在其他脚本运行时候name!=main,若在其他脚本中调用模块则输出其他脚本的结果,不会执行main模块
if __name__== "__main__":
    main()

            
          

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

python爬虫猫眼电影TOP100(爬虫入门基础,同步入库)_第1张图片

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

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

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

python爬虫猫眼电影TOP100(爬虫入门基础,同步入库)_第2张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论