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 网络爬虫,这篇文章非常棒。
文章评论