使用python实现抓取腾讯视频所有电影的爬虫


Posted in Python onApril 15, 2019

用python实现的抓取腾讯视频所有电影的爬虫

# -*- coding: utf-8 -*-
import re
import urllib2
from bs4import BeautifulSoup
import string, time
import pymongo
NUM   =0 #全局变量,电影数量
m_type = u'' #全局变量,电影类型
m_site = u'qq' #全局变量,电影网站
#根据指定的URL获取网页内容
def gethtml(url):
  req = urllib2.Request(url)
  response = urllib2.urlopen(req)
  html = response.read()
  return html
#从电影分类列表页面获取电影分类
def gettags(html):
  global m_type
  soup = BeautifulSoup(html)   #过滤出分类内容
  #print soup
  #<ulclass="clearfix _group" gname="mi_type" gtype="1">
  tags_all = soup.find_all('ul', {'class' :'clearfix _group' ,'gname' :'mi_type'})
  #print len(tags_all), tags_all
  #print str(tags_all[1]).replace('\n','')
  #<a _hot="tag.sub" class="_gtag _hotkey" href="http://v.qq.com/list/1_0_-1_-1_1_0_0_20_0_-1_0.html" title="动作" tvalue="0">动作</a>
  re_tags = r'<a _hot=\"tag\.sub\" class=\"_gtag _hotkey\" href=\"(.+?)\" title=\"(.+?)\" tvalue=\"(.+?)\">.+?</a>'
  p = re.compile(re_tags, re.DOTALL)
  tags = p.findall(str(tags_all[0]))
  if tags:
    tags_url = {}
    #print tags
    for tagin tags:
      tag_url = tag[0].decode('utf-8')
      #print tag_url
      m_type = tag[1].decode('utf-8')
      tags_url[m_type] = tag_url
  else:
      print"Not Find"
  return tags_url
#获取每个分类的页数
def get_pages(tag_url):
  tag_html = gethtml(tag_url)
  #divclass="paginator
  soup = BeautifulSoup(tag_html)   #过滤出标记页面的html
  #print soup
  #<divclass="mod_pagenav" id="pager">
  div_page = soup.find_all('div', {'class' :'mod_pagenav','id' :'pager'})
  #print div_page #len(div_page), div_page[0]
  #<aclass="c_txt6" href="http://v.qq.com/list/1_2_-1_-1_1_0_24_20_0_-1_0.html" title="25"><span>25</span></a>
  re_pages = r'<a class=.+?><span>(.+?)</span></a>'
  p = re.compile(re_pages, re.DOTALL)
  pages = p.findall(str(div_page[0]))
  #print pages
  if len(pages) >1:
    return pages[-2]
  else:
    return 1
def getmovielist(html):
  soup = BeautifulSoup(html)
  #<ulclass="mod_list_pic_130">
  divs = soup.find_all('ul', {'class' :'mod_list_pic_130'})
  #print divs
  for div_htmlin divs:
    div_html = str(div_html).replace('\n','')
    #print div_html
    getmovie(div_html)
def getmovie(html):
  global NUM
  global m_type
  global m_site
  re_movie = r'<li><a class=\"mod_poster_130\" href=\"(.+?)\" target=\"_blank\" title=\"(.+?)\"><img.+?</li>'
  p = re.compile(re_movie, re.DOTALL)
  movies = p.findall(html)
  if movies:
    conn = pymongo.Connection('localhost',27017)
    movie_db = conn.dianying
    playlinks = movie_db.playlinks
    #print movies
    for moviein movies:
      #print movie
      NUM +=1
      print"%s : %d" % ("=" *70, NUM)
      values = dict(
        movie_title = movie[1],
        movie_url  = movie[0],
        movie_site   = m_site,
        movie_type   = m_type
        )
      print values
      playlinks.insert(values)
      print"_" *70
      NUM +=1
      print"%s : %d" % ("=" *70, NUM)
  #else:
  #  print"Not Find"
def getmovieinfo(url):
  html = gethtml(url)
  soup = BeautifulSoup(html)
  #pack pack_album album_cover
  divs = soup.find_all('div', {'class' :'pack pack_album album_cover'})
  #print divs[0]
  #<a href="http://www.tudou.com/albumplay/9NyofXc_lHI/32JqhiKJykI.html" target="new" title="《血滴子》独家纪录片" wl="1"> </a>
  re_info = r'<a href=\"(.+?)\" target=\"new\" title=\"(.+?)\" wl=\".+?\"> </a>'
  p_info = re.compile(re_info, re.DOTALL)
  m_info = p_info.findall(str(divs[0]))
  if m_info:
    return m_info
  else:
    print"Not find movie info"
  return m_info
def insertdb(movieinfo):
  global conn
  movie_db = conn.dianying_at
  movies = movie_db.movies
  movies.insert(movieinfo)
if __name__ =="__main__":
  global conn
  tags_url ="http://v.qq.com/list/1_-1_-1_-1_1_0_0_20_0_-1_0.html"
  #print tags_url
  tags_html = gethtml(tags_url)
  #print tags_html
  tag_urls = gettags(tags_html)
  #print tag_urls
  for urlin tag_urls.items():
    print str(url[1]).encode('utf-8') #,url[0]
    maxpage =int(get_pages(str(url[1]).encode('utf-8')))
    print maxpage
    for xin range(0, maxpage):
      #http://v.qq.com/list/1_0_-1_-1_1_0_0_20_0_-1_0.html
      m_url = str(url[1]).replace('0_20_0_-1_0.html','')
      movie_url ="%s%d_20_0_-1_0.html" % (m_url, x)
      print movie_url
      movie_html = gethtml(movie_url.encode('utf-8'))
      #print movie_html
      getmovielist(movie_html)
      time.sleep(0.1)

总结

以上所述是小编给大家介绍的使用python实现抓取腾讯视频所有电影的爬虫,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
ptyhon实现sitemap生成示例
Mar 30 Python
用python实现对比两张图片的不同
Feb 05 Python
flask中过滤器的使用详解
Aug 01 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
Python数据集切分实例
Dec 08 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
python是怎么被发明的
Jun 15 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
Python 编程速成(推荐)
Apr 15 #Python
值得收藏的10道python 面试题
Apr 15 #Python
Python 学习教程之networkx
Apr 15 #Python
Python OS模块实例详解
Apr 15 #Python
Python日期时间Time模块实例详解
Apr 15 #Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 #Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 #Python
You might like
Memcached常用命令以及使用说明详解
2013/06/27 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
微信支付开发告警通知实例
2016/07/12 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
Python 元组操作总结
2019/09/18 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
opencv实现图像几何变换
2021/03/24 Python
机械制造毕业生求职信
2014/03/03 职场文书
初三学生个人自我评定
2014/04/06 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
售后服务质量承诺书
2015/04/29 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书