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/ 请尊重其他人的劳动成功,转载请注明。
原文地址:https://www.cnblogs.com/Moon-Face/p/14465792.html