python+request爬取电影网站

来源:互联网 发布:linux 杀dhcp进程 编辑:程序博客网 时间:2024/06/05 04:07

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

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

实现功能:

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

代码块 主要代码

pythonimport requestsimport lxml.html as htmlimport 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…

1 0
原创粉丝点击