首页 编程教程正文

用Python爬取某网站上的电影资源

piaodoo 编程教程 2020-02-22 22:01:55 872 0 python教程

本文来源吾爱破解论坛

本帖最后由 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文件

生成的excel文件

录制_2019_01_11_16_11_42_357.gif (563.09 KB, 下载次数: 25)

下载附件  保存到相册

2019-1-11 16:30 上传

运行效果

运行效果

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7350.html

搜索