红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 编程语言
  3. Python
  4. 正文

python爬虫实战

2021年3月19日 1305点热度 0人点赞 0条评论

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)+'\r')
       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 网络爬虫,这篇文章非常棒。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Python 爬虫
最后更新:2021年3月19日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
下一篇 >

文章评论

取消回复

*

code

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号