1. #!/usr/local/bin/python
  2. # -*- coding: utf-8 -*-
  3. # Python: 3.5
  4. # Author: wucl(),zhenghai.zhang
  5. # Program: 爬取CBO网站上所有电影的名称并写入数据库。
  6. # Version: 0.1
  7. # History: 2017.10.25
  8.  
  9. import requests,time, pymysql, re, datetime
  10. from exchangelib import DELEGATE, Account, Credentials, Message, Mailbox, HTMLBody
  11.  
  12. host = 'xxx'
  13. user = 'xxx'
  14. passwd = 'xxx'
  15. dbme = 'crawl'
  16. dbtarget = 'back_brace'
  17. table = 'movie_hotwords'
  18. tabledelta = 'movie_hotwords_delta'
  19. tablesync = 'slot_value'
  20. port = 3306
  21. tolist = ['xxx@xxx.com']
  22.  
  23. def get_info():
  24. try:
  25. url = 'http://www.cbooo.cn/Mdata/getMdata_movie?area=50&type=0&year=0&initial=%E5%85%A8%E9%83%A8&pIndex=1'
  26. pData = requests.get(url).json()
  27. return pData['tPage'], pData['tCount']
  28. except:
  29. print("获取总页数和总电影数失败")
  30.  
  31. def get_movies(page):
  32. try:
  33. url = 'http://www.cbooo.cn/Mdata/getMdata_movie?area=50&type=0&year=0&initial=%E5%85%A8%E9%83%A8&pIndex=' + str(page)
  34. pData = requests.get(url).json()
  35. movies_list = pData['pData']
  36. return movies_list
  37. except:
  38. print('获取第%s页电影列表失败' % page)
  39.  
  40. def Movie_insert(host, user, passwd, dbme, port, table, movies_list):
  41. conn=pymysql.connect(host=host, user=user, passwd=passwd, db=dbme, port=port, charset="utf8")
  42. cur=conn.cursor()
  43. new_movies = []
  44. punc = "!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏.()::。·"
  45. punctuation = punc
  46. for movie in movies_list:
  47. try:
  48. movie['MovieName'] = re.sub(r"[%s]+" % punctuation, "", movie["MovieName"])
  49. cmd = 'insert into %s(movie_id, movie_name) values("%s", "%s")' % (table, movie['ID'], movie['MovieName'])
  50. cur.execute(cmd)
  51. new_movies.append(movie)
  52. except pymysql.Error:
  53. print(" "*20, movie['MovieName'], "already exists, skip……")
  54. cur.close()
  55. conn.commit()
  56. conn.close()
  57. return new_movies
  58.  
  59. def Movie_new_and_sync(host, user, passwd, dbme, dbtarget, port, tabledelta, movies_list, tablesync):
  60. conn = pymysql.connect(host=host, user=user, passwd=passwd, db=dbme, port=port, charset="utf8")
  61. cur = conn.cursor()
  62. cur.execute("delete from %s " % dbme+"."+tabledelta)
  63.  
  64. for movie in movies_list:
  65. try:
  66. cmd = 'insert into %s(movie_id, movie_name) values("%s", "%s")' % (tabledelta, movie['ID'], movie['MovieName'])
  67. cmdsync = 'insert into %s(slot_type_id, slot_value, create_by, modify_by, gmt_create, gmt_modify, out_value) values("%s", "%s", "%s", "%s", "%s", "%s", "%s")' % (dbtarget+"."+tablesync, "xxxxxx", movie['MovieName'], "system", "system", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"")
  68. cur.execute(cmd)
  69. cur.execute(cmdsync)
  70. except pymysql.Error:
  71. print(" " * 20, movie['MovieName'], "already exists, skip……")
  72.  
  73. try:
  74. cmdbacktoskill = 'insert into back_brace.release_task(app_type,app_status,type,ref_id,status,register_id,create_by,modify_by,gmt_create,gmt_modify) values("BACKBRACE","testpass","SLOT","xxxxxx","init","SLOT_BACKBRACE_TESTPASS" ,"zhenghai.zhang","zhenghai.zhang","%s","%s")' % (datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
  75. cmdskilltoskillpro = 'insert into back_brace.release_task(app_type,app_status,type,ref_id,status,register_id,create_by,modify_by,gmt_create,gmt_modify) values("SKILL","deploy","SLOT","xxxxxx","init","SLOT_SKILL_DEPLOY" ,"zhenghai.zhang","zhenghai.zhang","%s","%s")' % (datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
  76.  
  77. print(cmdbacktoskill)
  78. cur.execute(cmdbacktoskill)
  79. print(cmdskilltoskillpro)
  80. cur.execute(cmdskilltoskillpro)
  81. except pymysql.Error:
  82. print("write into back_brace.release_task error!!!")
  83. cur.close()
  84. conn.commit()
  85. conn.close()
  86.  
  87. def Email(to, subject, body):
  88. creds = Credentials(
  89. username='xxxxxx',
  90. password='xxxxxx')
  91. account = Account(
  92. primary_smtp_address='xxx@xxx.com',
  93. credentials=creds,
  94. autodiscover=True,
  95. access_type=DELEGATE)
  96. m = Message(
  97. account=account,
  98. subject=subject,
  99. body=HTMLBody(body),
  100. to_recipients=[Mailbox(email_address=to)])
  101. m.send_and_save()
  102.  
  103. if __name__ == '__main__':
  104. update_movies = []
  105. pages, counts = get_info()
  106. pages = 1
  107. for i in range(1,pages + 1):
  108. print("*"*30,i,"*"*30)
  109. movies_list = get_movies(i)
  110. new_movies = Movie_insert(host, user, passwd, dbme, port, table, movies_list)
  111. for new_movie in new_movies:
  112. print(new_movie['MovieName'],"Added")
  113. onemovie = {}
  114. onemovie["ID"] = new_movie["ID"]
  115. onemovie["MovieName"] = new_movie["MovieName"]
  116. update_movies.append(onemovie)
  117. time.sleep(1)
  118. print(update_movies)
  119.  
  120. try:
  121. Movie_new_and_sync(host, user, passwd, dbme, dbtarget, port, tabledelta, update_movies, tablesync) # 将增加的电影写入movie_hotwords_delta表中
  122. except:
  123. print("Movie update and sync Error!")
  124.  
  125. subject = '本次新增电影名称'
  126. body = "本次新增的电影名称为:<hr>"
  127. for movie in update_movies:
  128. body += movie["MovieName"] + "<br>"
  129. for to in tolist:
  130. Email(to, subject, body)

欢迎大侠指点

Python3.5爬取cbooo.cn数据并且同步到mysql中的更多相关文章

  1. Python3.5爬取豆瓣电视剧数据并且同步到mysql中

    #!/usr/local/bin/python # -*- coding: utf-8 -*- # Python: 3.5 # Author: zhenghai.zhang@xxx.com # Pro ...

  2. node 爬虫 --- 将爬取到的数据,保存到 mysql 数据库中

    步骤一:安装必要模块 (1)cheerio模块 ,一个类似jQuery的选择器模块,分析HTML利器. (2)request模块,让http请求变的更加简单 (3)mysql模块,node连接mysq ...

  3. Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

  4. 一个简易的Python爬虫,将爬取到的数据写入txt文档中

    代码如下: import requests import re import os #url url = "http://wiki.akbfun48.com/index.php?title= ...

  5. Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  6. Python3:爬取新浪、网易、今日头条、UC四大网站新闻标题及内容

    Python3:爬取新浪.网易.今日头条.UC四大网站新闻标题及内容 以爬取相应网站的社会新闻内容为例: 一.新浪: 新浪网的新闻比较好爬取,我是用BeautifulSoup直接解析的,它并没有使用J ...

  7. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  8. Python爬取招聘网站数据,给学习、求职一点参考

    1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...

  9. Java爬取同花顺股票数据(附源码)

    最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...

随机推荐

  1. Node单线程高并发原理

    一.node是如何处理web请求的 浏览器中的js是单线程的,node也是单线程的.这个单线程相当于一个大管家,一切大小事务都要经过他的手才能办成,它总是把IO任务放入到任务池中. 虽然说是单线程,但 ...

  2. Mysql模糊查询 select count(*) from sys_invitation where from_id like '%1006%';

    select count(*) from sys_invitation where from_id like '%1006%'; 查询结果 select * from sys_invitation w ...

  3. 浅谈 iOS 与 H5 的交互- JavaScriptCore 框架

    前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCo ...

  4. k8s实战之Service

    一.概述 为了适应快速的业务需求,微服务架构已经逐渐成为主流,微服务架构的应用需要有非常好的服务编排支持,k8s中的核心要素Service便提供了一套简化的服务代理和发现机制,天然适应微服务架构,任何 ...

  5. 【Struts2】自定义拦截器interceptors

    下面给一张图片表示Struts2拦截器的处理流程. 通过这个流程图,我们可以看出一个完整的请求大概的过程为: 请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2--> ...

  6. formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用

    实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...

  7. 豆瓣上9分以上的IT书籍-编程技术篇

    在豆瓣上9分以上的IT书籍-编程语言篇中,收集了很多优秀的编程语言书籍,也得到了不少读者的喜欢.不过也有一些读者留言说某某书为什么没有,一种是因为某些书并不算讲某种编程语言的,一种是由于豆瓣9分以上这 ...

  8. Linux中在防火墙中开启80端口的例子

    最近自己在学习Linux.搭建一个LNMP环境.在测试时一切都好.然后重启Linux后.再次访问网站无法打开.最终原因是在防火墙中没有加入 80 端口的规则.具体方法如下: 在CentOS下配置ipt ...

  9. Java 8 Streams filter examples

    1. Streams filter() and collect() package com.mkyong.java8; import java.util.Arrays;import java.util ...

  10. zTree变异篇:如何让同级树节点平铺而非垂直显示

    昨天有一个zTree的使用者在实际的项目中有着这样一个特殊的需求,要求同级树节点能够水平显示,根据设定的宽度自动换行,效果图如下所示:   通过在浏览器调试模式下观察其同级节点的css为: 这个dis ...