使用python+request进行电影网站的爬取

今天我们爬取的网站是http://www.6vhao.com
项目链接GtiHub

实现功能:

  • 对不同分类下的电影进行爬取
  • 只留下百度网盘的下载链接
  • 正则表达式的使用

代码块 主要代码

python
import requests
import lxml.html as html
import re
#将不同的电影分类放入列表中
list_dianyinleibei = ['xiju','dongzuo','aiqing','kehuan','qihuan','huanxiang','kongbu','zhanzheng','maoxian','juqingpian','zhuanji','lishi']
for ppaa in list_dianyinleibei:
    for pa in range(1,10):#爬取每个分类下的前10页数据
        # url = 'http://www.6vhao.com/s/xiju/'
        if pa == 1:
            url = 'http://www.6vhao.com/s/%s/'%ppaa
        else:
            url = 'http://www.6vhao.com/s/%s/index_%d.html'%(ppaa,pa)
        r = requests.get(url)
        # 编码问题,不执行这句话会乱码
        r.encoding = 'gb2312'
        tree = html.fromstring(r.text)

        """
        一级页面的标题,属性,二级链接
        """
        title_list = tree.xpath('//*[@id="main"]/div[1]/div/ul/li/a//text()')
        faburiqi_list = tree.xpath('//*[@id="main"]/div[1]/div/ul/li/span//text()')
        erji_url = tree.xpath('//*[@id="main"]/div[1]/div/ul/li/a/@href')
        page_list(erji_url)#调用了自己写的函数,

函数代码块page_list

def page_list(erji_url):
    for i in range(len(erji_url)):
     erjiwenben = geturl(erji_url[i]) #获取二级文本,也是自定义函数geturl()
     #get_tongyongziduan()自定义函数
        daoyan = get_tongyongziduan(u'导 *演(.*)',erjiwenben) #导演抓取
        dianyinpinfen = get_tongyongziduan(u'豆瓣评 *分(.*)', erjiwenben) #电影评分
        if not dianyinpinfen:
            dianyinpinfen = u'暂无评分'
        pianchang = get_tongyongziduan(u'片 *长(.*)', erjiwenben) #抓取影片播放时间
        shangyinriqi = get_tongyongziduan(u'上映日期(.*)', erjiwenben) #抓取上映日期
        yuyan = get_tongyongziduan(u'语 *言(.*)', erjiwenben) #抓取电影语言字段
        zimu = get_tongyongziduan(u'字 *幕(.*)', erjiwenben) #抓取字幕字段
        xiazaidizhi = get_tongyongziduan(u'网盘链接[::](http://pan.baidu.com.+?) ?密码[::]', erjiwenben) #抓取网盘下载链接
        #在通用函数中不小将http中的冒号:去掉了,通过这样补回来
        xiazaidizhi = re.sub('http','http:',xiazaidizhi)
        tiquma = get_tongyongziduan(u'网盘链接[::]http://pan.baidu.com.+? ?密码[::](.*)', erjiwenben) # 抓取网盘提取密码

        dianyinleibie = get_tongyongziduan(u'类 *[别型](.*)', erjiwenben)
        print '电影类型',dianyinleibie
        title = title_list[i]

        title = re.sub(u'.*《',u'《',title)
        title = re.sub(u'》.*',u'》',title)#正则re.sub()替换
        faburiqi = faburiqi_list[i]
        myurl = erji_url[i]
        #对抓取到的数据进行输出,
        print daoyan
        print dianyinpinfen
        print pianchang
        print shangyinriqi
        print yuyan
        print zimu
        print xiazaidizhi
        print tiquma
        print dianyinleibie

代码块geturl,get_tongyongziduan

上面代码中这两个函数被调用:


"""
处理二级url函数,返回一个页面文本
"""
def geturl(url):
    r = requests.get(url)
    r.encoding = 'gb2312'
    tree = html.fromstring(r.text)
    wenben = tree.xpath('//text()')
    wenben = "".join(wenben)
    # print wenben
    return wenben

"""
设计通用字段抓取函数 str1 填写相关的正则表达式,search_wenben 填写相关的查找文本
"""
def get_tongyongziduan(str1, search_wenben):
    tongyong_group = re.search(str1, search_wenben)
    if tongyong_group:
        tongyong = tongyong_group.group(1).replace(':','').replace(u':','').strip()
    else:
        tongyong = ""
    return tongyong

在这样基本完成了对电影网站的下载,注意一点,被调用的自定义函数要写在主代码块的前面哦
我在GitHub上面上传了我的爬取项目,里面还实现了对抓取的数据导入到mysql数据库中。
刚刚开始写博客,写的不好的地方还望大家指出。o(∩∩)o…

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐