本文来源吾爱破解论坛
本帖最后由 PhilipZyy5012 于 2019-1-12 22:18 编辑
【故事背景】我是一个贫穷的学生,所以一般不开各大影视平台的VIP,想看最近的电影电视剧一般都是去公众号找资源的,最近我发现了一个公众号,他资源更新的还是挺快的,而且基本都是1080P画质以上的。
有我就在想我每次都要去搜索相应的片名,然后再去他的公众号对话窗口回复电影名,然后他给你一个超链接跳转到相应的页面,这样就比较繁琐,于是我就想着写一个爬虫来爬取他公众号对接的网页上的电影资源分享链接。
代码给在下面了。
【说明】
为了避免涉嫌推广,我已经将该公众号对接的url去掉了。在这里仅做爬虫代码分享,该写的注释我已经写了。由于我也只是一个初学Python的菜鸟,所以也是看了很多教程依葫芦画瓢写出来的东西。
由于我在学校学的语言是C#,做winform窗体比较方便,所以一直想用winform写个窗体然后调用这个python爬虫脚本,但是目前看来好像还是挺麻烦的。c#写爬虫我也还没怎么学,所以只能先这样子。
这次仅做初学者的技术分享,未来可能会做一个winform界面,方便大家直接爬取资源。
【协和研究所】这是我和我的小伙伴的团队名称
[Python] 纯文本查看 复制代码
import os.path import openpyxl import sys import lxml import re import time from webspider import WebSpider as w if os.path.exists('电影资源爬取结果.xlsx'): print('爬取结果已存在,如需重新爬取,请手动删除旧文件并重新运行本程序!') sys.exit() else: #创建结果表格并初始化 excel = openpyxl.Workbook() ws = excel.active ws.title = 'result' ws['A1'] = '电影名' ws['B1'] = '下载链接' row = 1 url = 'http://????.cn/' spider = w(url) is_last_page = False page = 0 while not is_last_page: page+=1 print('正在下载第%d页...'%page) html = spider.download_html(url) #提取电影名和下载链接 for each in spider.selector(html,'div[class*="homeposte"]'): row += 1 ws['A%d'%row] = each.cssselect('h2 a')[0].text ws['B%d'%row] = each.cssselect('p')[0].text for each in spider.selector(html,'nav[class*="pagination"] a'): is_last_page = True if (each.text == '下一页 »'): is_last_page = False #提取下一页的链接,真的忘了css选择器表示该怎么写了 url = str(re.search(r'"(.+)"',lxml.html.tostring(each,encoding="Unicode")).group(1)) print('成功下载完第%d页!'%page) #time.sleep(可适当设置拖延时间) print('\n\n全部下载完成!^_^') print('\n\nPowered By 协和研究所') excel.save('电影资源爬取结果.xlsx') #将爬取结果命名并保存
[Python] 纯文本查看 复制代码
#Scape_v2.0版 # ---powered by 协和研究所 import requests import time import lxml.html class WebSpider(object): """网络爬虫类""" def __init__(self,url): self.url = url #爬取的网址 def download_html(self,html_url = None,num_tries = 2,encoding = None): #下载网页源码,默认下载self.url网址中的内容 if not html_url: html_url = self.url response = requests.get(html_url) url_code = response.status_code while(url_code != requests.codes.ok and num_tries > 0): #处理网页响应出错 if (url_code >= 500 and url_code < 600): #当为服务端出错时,重请求直至成功或尝试次数用完为止 num_tries -= 1 response = requests.get(html_url) url_code = response.status_code else: #其他错误则引发HTTPError错误 raise(requests.exceptions.HTTPError) if response.status_code == requests.codes.ok: #判断网页响应是否成功 if (not encoding): #默认编码为requests自动判断的结果 html = response.text else: #若制定了编码格式,则采用该编码格式就行解码 response.encoding = encoding html = response.text else: html = None return html def selector(self,html,css_expression): #根据表达式提取html页面中的信息 if css_expression: tree = lxml.html.fromstring(html) return tree.cssselect(css_expression)
爬取结果.PNG (251.34 KB, 下载次数: 41)
下载附件 保存到相册
2019-1-11 16:33 上传
生成的excel文件
录制_2019_01_11_16_11_42_357.gif (563.09 KB, 下载次数: 25)
下载附件 保存到相册
2019-1-11 16:30 上传
运行效果
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: 【笔记】猜数字
- 下一篇: Python 破解MD5