使用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中的文件和目录操作实现代码
Mar 13 Python
在Windows8上的搭建Python和Django环境
Jul 03 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
Python实现基于POS算法的区块链
Aug 07 Python
使用Python自动化破解自定义字体混淆信息的方法实例
Feb 13 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
Python如何读写字节数据
Aug 05 Python
pd.DataFrame中的几种索引变换的实现
Jun 16 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
浅谈js闭包理解
2019/03/28 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python字符串匹配算法KMP实例
2015/07/18 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
社团文化节邀请函
2014/01/10 职场文书
医学专业自荐信
2014/06/14 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
让生命充满爱观后感
2015/06/08 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
2015年校本培训工作总结
2015/07/24 职场文书