使用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 相关文章推荐
详解Python函数作用域的LEGB顺序
May 14 Python
Python3.6正式版新特性预览
Dec 15 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
Python装饰器基础概念与用法详解
Dec 22 Python
python分数表示方式和写法
Jun 26 Python
python列表推导式操作解析
Nov 26 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
python 制作磁力搜索工具
Mar 04 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
python非标准时间的转换
Jul 25 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的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
js charAt的使用示例
2014/02/18 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
python解析xml简单示例
2019/06/21 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
尽职尽责村干部自我鉴定
2014/01/23 职场文书
高校十八大报告感想
2014/01/27 职场文书
成龙洗发水广告词
2014/03/14 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
上班离岗检讨书
2014/09/10 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript