• python爬虫实战


    python爬虫实战

    说出来你可能不信,我学习python的其中一个原因是有个开培训机构的亲戚,让我帮忙在网上down教学资料,比如这个网页。

    一开始我是一个下,少了还好说,如果让把某个up的视频全下下来,那...所以我写了个js脚本,可以在视频详情页抓取视频名称,然后依然是要手动下载,还是一样的痛苦,然后我就去学python了...

    经过了几天的学习,感觉基本的内容已经差不多了,是时候来搞个爬虫抓视频了。

    通过对好看视频作者栏目页面的调试,发现可以用延迟加载用的请求来获取视频下载列表:

    https://haokan.hao123.com/author/1660856148856519?_format=json&rn=16&ctime=15900349483931&_api=1")
    

    这个请求会返回一个包含16个视频的列表,其中包含视频地址,但有个问题,其中需要传入一个ctime,是以ctime为基点查询结果的,再尝试一下:

    https://haokan.hao123.com/author/1660856148856519?_format=json&rn=16&ctime=0&_api=1
    

    返回的正好是最新的16条视频,现在我们需要的信息有了,只缺代码。

    import requests,sys
    from urllib import request
    from bs4 import BeautifulSoup
    # from you_get import common
    class DownloadHelp():
        def processReport(self,a,b,c):
            per=100.0*a*b/c
            if per>100:
                per=1
            sys.stdout.write(" "+"%.2f%% 已经下载的大小:%1d 文件大小:%1d"%(per,a*b,c)+'
    ')
            sys.stdout.flush()
        def download(self,url,fileName):
            request.urlretrieve(url, filename=fileName,reporthook=self.processReport)
    
    def dealResponse(response):
        ctime=response['ctime']
        results=response['results']
        downloader=DownloadHelp()
        if len(results)>0:
            for video in results:
                videoContent=video['content']
                videoName=videoContent['title']
                videoSrc=videoContent['video_src']
                downloader.download(videoSrc,videoName+'.flv')
                # common.any_download(url=videoSrc,output_dir="d:\download",merge=True,info_only=False,stream_id="flv")
        return "https://haokan.hao123.com/author/1660856148856519?_format=json&rn=16&ctime="+ctime+"&_api=1"
    
    def dealHaokanResponse(url):
        resp=requests.get(url)
        respJson=resp.json()
        response=respJson['data']['response']
        if int(response['response_count'])>0:
            nextRequestUrl=dealResponse(response)
            dealHaokanResponse(nextRequestUrl)
    
    dealHaokanResponse("https://haokan.hao123.com/author/1660856148856519?_format=json&rn=16&ctime=15900349483931&_api=1")
    
    

    代码主要用到requests库,可以使用下面的命令安装。

    pip install requests
    

    安装部分库可能会出错,在网上查询了一番后发现在pip命令中加入--default-timeout=100就可以避免安装出错,例如pip --default-timeout=100 install html5lib这可能是因为国内网络环境不稳定吧。

    这个库可以提供对http访问请求的支持,包括get/post/delete等。

    此外python网络爬虫长需要的库还有:

    • BeautifulSoup 一个强大的库,可以对html文件解析,将其解析为树结构的数据供开发者进一步处理。
    • html5lib 相当于BeautifulSoup库的html5解析引擎,提供htm5支持

    因为一些原因,我还查找了支持js的爬虫,没找到想要的,但是找到了一些js引擎库,可以用来单独执行js,想了解的可以阅读这里

    想了解更多python爬虫知识的可以阅读一小时入门 Python 3 网络爬虫,这篇文章非常棒。

    爬虫已经更新,最新版本请阅读我的这篇博文

    本篇文章首发自魔芋红茶的博客https://www.cnblogs.com/Moon-Face/ 请尊重其他人的劳动成功,转载请注明。
  • 相关阅读:
    PDO应用
    分页查询
    PHP去除数组中重复数据的两个例子
    数据库访问(现用基本格式)
    克隆、加载类
    抽象类和接口
    静态
    PHP基础
    数据库的常用函数
    数据库的高级查询
  • 原文地址:https://www.cnblogs.com/Moon-Face/p/14465792.html
Copyright © 2020-2023  润新知