使用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 相关文章推荐
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
详解Python中的四种队列
May 21 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
python的常见矩阵运算(小结)
Aug 07 Python
python定位xpath 节点位置的方法
Aug 27 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Python使用configparser读取ini配置文件
May 25 Python
简述python Scrapy框架
Aug 17 Python
python pip如何手动安装二进制包
Sep 30 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 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
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
python入门:这篇文章带你直接学会python
2018/09/14 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
在python3中实现更新界面
2020/02/21 Python
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
工作人员思想汇报
2014/01/09 职场文书
高二化学教学反思
2014/01/30 职场文书
小学母亲节活动方案
2014/03/14 职场文书
倡议书范文
2014/04/16 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
借款民事起诉状范文
2015/05/19 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
Golang表示枚举类型的详细讲解
2021/09/04 Golang
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技