各种cms
用苹果cms搭建的电影网站,采集影片可以通过后台的自定义资源库链接资源网站。这种方式简单易操作。但是问题是采集的时候只有两种属性可以选择,一是可以选择影片类型,二是可以有限的选择影片更新时间。这样操作的结果就是无法区分质量,良秀不齐,好片烂片一键全踩。
为了解决这个问题,用python编了个小程序实现按指定影片名字批量采集。
第一部分是个爬虫程序,从豆瓣影片排行榜爬取各个类型影片好评率排在前30%的影片,也可以只选前10%或20%。把影片名称存为“***.Txt”文件。
第二部分采集程序, 按照影片名称逐个搜索并采集到自己的电影网站上。
这样可以保证自己的电影库只采集排名靠前的好影片,片不在多而在精。以下为采集部分程序的源码。仅供参考。
# 模拟苹果cms后台自定义资源库里的查询。 提取数据用正则表达式和xpath# 目前是精确查询,如查“蛇”,不会把其他带“蛇”字的影片采集到。也可改为模糊查询import osimport randomimport timeimport requestsfrom lxml import etreeimport redef getmnames():# 从文件中导出电影名列表 with open(“e:\dc\dbrate\影片名.txt”, r, encoding=utf-8)as f:mname = f.readline() while mname: getid_1156(mname.replace(\n, ))mname = f.readline()
def getid_1156(moviename): # 本函数调用苹果cms后台-自定义资源库-1156资源-[查询按钮],按名称查询电影,如果查到就抽取电影的id, 然后直接按id采集电影 global colsumpath = re:\dc\anmolive\\# 指定一个保存文字和图片的文件夹, dc意思是datacenter folder = os.path.exists(path) if not folder:# 判断是否存在文件夹如果不存在则创建为文件夹 os.makedirs(path)# makedirs 创建文件时如果路径不存在会创建这个路径 #构造指定起始点的页面的网址 url = ?ac=list&cjflag=59a9b8208b4b3f76ab1f5a83cdf& \ cjurl=http%3A%2F%2Fcj.1156zy.com%2Finc%2Fapi.php&h=&t=&ids=&wd= + moviename + &type=1&mid=1¶m=&page=1&limit= # 1156资源网的cookie cookies_1156 = {UM_distinctid: 172bc03c10f-06e3278c369-f7d123e-1fa400-172bc430d3ec, __cfduid: daaa7174fd411d5d1469f, PHPSESSID: 7bee1fec61ed93e1d1c11a13a3, admin_id: 1, admin_name: ×××, admin_check: 4bf45d54e07ea484d09214f2fda, CNZZDATA: –http%253A%252F%252Fanmo.live%252F%7C}headers = get_headers() try: print(正在查找 + moviename)r = requests.get(url, headers=headers, cookies=cookies_1156) except: print(“Connection refused by the server..”)time.sleep(5)cont = r.content# r.content返回的是bytes型的数据 contstr = str(cont, utf-8)# 转成utf-8字符串#上边的请求会返回所有包含查询词的名字,如搜美女,返回资源站所有带美女两字的电影名, reg_rul = r<input.+?\n.+?<td>+moviename+</td>#正则表达式精确查找电影名。 reg = re.compile(reg_rul)movie_list = reg.findall(contstr)# img_list 是包含所有imgurl的list if movie_list:#如果找到了,用xpath提取value的值 ethtml = etree.HTML(movie_list[0])# 字符串转成xpath可处理的格式 movieids = ethtml.xpath(//input[@class=”layui-checkbox checkbox-ids”]/@value) #xpath取出电影的id for movieid in movieids:col_url = ?cjflag=59a9b825dfa8b76ab1f5a83cdf& \ cjurl=http%3A%2F%2Fcj.1156zy.com%2Finc%2Fapi.php&h=&t=&ids=&wd=%E9%87%91%E5%88%9A%E7%8B%BC&type=1&mid=1 \ ¶m=&page=%7Bpage%7D&limit=%7Blimit%7D&ac=cjsel&ids= + movieid try:r = requests.get(col_url, headers=headers, cookies=cookies_1156) except: print(“Connection refused by the server..”)result = r.content# r.content返回的是bytes型的数据 result = str(result, utf-8)# 转成utf-8字符串 if result.find(“下载成功”) != -1:colsum += 1 print(moviename +采集成功) elif result.find(“未绑定”) != -1: print(发现影片< + moviename + >, 分类未绑定,未更新。 ) elif result.find(“无需更新”) != -1: print(影片< + moviename + >, 无需更新。 ) else: print(发现影片< + moviename + >,未更新。) else:# 没搜到精确的影片名, 把名字存入没采到列表中 with open(path + 1156mcdlist.txt, a, encoding=utf-8)as mcdf:# 这个文件mcdlist.txt保存没采集到的影片名字 mcdf.write(moviename + \n) print(moviename +未发现。)def get_headers():# 随机获取一个headers user_agents = [Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/ Firefox/4.0.1, Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50, Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36, Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36]headers = {User-Agent: random.choice(user_agents)} return headerscolsum = 0# 采集成功的数量getmnames()print(“已成功采集”+str(colsum)+”个影片”)
最新开源影视