使用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 相关文章推荐
Windows下python2.7.8安装图文教程
May 26 Python
django定期执行任务(实例讲解)
Nov 03 Python
机器学习之KNN算法原理及Python实现方法详解
Jul 09 Python
python调用动态链接库的基本过程详解
Jun 19 Python
Python Django 命名空间模式的实现
Aug 09 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
python DataFrame转dict字典过程详解
Dec 26 Python
解析PyCharm Python运行权限问题
Jan 08 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
如何学习Python time模块
Jun 03 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
php foreach、while性能比较
2009/10/15 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
理解javascript对象继承
2016/04/17 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
python调用API实现智能回复机器人
2018/04/10 Python
django静态文件加载的方法
2018/05/20 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
CNC数控操作工岗位职责
2013/11/19 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
安全标准化实施方案
2014/02/20 职场文书
健康教育评估方案
2014/05/25 职场文书
五四青年节演讲稿
2014/05/26 职场文书
施工安全汇报材料
2014/08/17 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
教师师德承诺书2016
2016/03/25 职场文书