[Python] 【爬虫】python爬取MSDN站所有P2P下载链接
作者:CC下载站 日期:2020-03-27 00:00:00 浏览:64 分类:编程开发
今日,msdn的新网站开放注册,然后体验了一波,发现要强制观看30S的广告才可以下载,因此就想提前把资源爬取下来以便后用。
先来看下成果:
1,网站分析
1.1通过直接爬取:https://msdn.itellyou.cn/,可以获得8个ID,对应着侧边栏的八个分类
1.2没展开一个分类,会发送一个POST请求
传递的就是之前获取的8个ID之一
1.3查看这个请求的返回值,可以看到又获得一个ID,以及对应的资源名称。
1.4点击,展开一个资源可以发现,又多了两个POST请求
1.4.1第一个GETLang,经分析大概意思就是,获取资源的语言,然后这个请求也发送了一个ID,然后在返回值中又获得一个ID,这就是后文中的lang值
1.4.2第二个GetList,这个传递了三个参数:
(1)ID:经对比可发现这个ID就是我们之前一直在用的ID。
(2)lang,我后来才发现是language的缩写,就是语言的意思,我们从第一个GetLang的返回值可以获取,这个lang值。
(3)filter,翻译成中文就是过滤器的意思,对应图片坐下角的红色框框内是否勾选。
1.4.3到这里就以及在返回值中获得了下载地址了:
综上就是分析过程。然后就开始敲代码了
2,为了追求速度,选择了Scrapy框架。然后代码自己看吧。
爬虫.py:
#-*-coding:utf-8-*- importjson importscrapy frommsdn.itemsimportMsdnItem classMsdndownSpider(scrapy.Spider): name='msdndown' allowed_domains=['msdn.itellyou.cn'] start_urls=['http://msdn.itellyou.cn/'] defparse(self,response): self.index=[iforiinresponse.xpath('//h4[@class="panel-title"][email protected]').extract()] #self.index_title=[iforiinresponse.xpath('//h4[@class="panel-title"]/a/text()').extract()] url='https://msdn.itellyou.cn/Category/Index' foriinself.index: yieldscrapy.FormRequest(url=url,formdata={'id':i},dont_filter=True, callback=self.Get_Lang,meta={'id':i}) defGet_Lang(self,response): id_info=json.loads(response.text) url='https://msdn.itellyou.cn/Category/GetLang' foriinid_info:#遍历软件列表 lang=i['id']#软件ID title=i['name']#软件名 #进行下一次爬取,根据lang(语言)id获取软件语言ID列表 yieldscrapy.FormRequest(url=url,formdata={'id':lang},dont_filter=True,callback=self.Get_List, meta={'id':lang,'title':title}) defGet_List(self,response): lang=json.loads(response.text)['result'] id=response.meta['id'] title=response.meta['title'] url='https://msdn.itellyou.cn/Category/GetList' #如果语言为空则跳过,否则进行下次爬取下载地址 iflen(lang)!=0: #遍历语言列表ID foriinlang: data={ 'id':id, 'lang':i['id'], 'filter':'true' } yieldscrapy.FormRequest(url=url,formdata=data,dont_filter=True,callback=self.Get_Down, meta={'name':title,'lang':i['lang']}) else: pass defGet_Down(self,response): response_json=json.loads(response.text)['result'] item=MsdnItem() foriinresponse_json: item['name']=i['name'] item['url']=i['url'] print(i['name']+"--------------"+i['url'])#测试输出,为了运行时不太无聊 returnitem
items.py:
#-*-coding:utf-8-*- #Defineherethemodelsforyourscrapeditems # #Seedocumentationin: #https://docs.scrapy.org/en/latest/topics/items.html importscrapy classMsdnItem(scrapy.Item): #definethefieldsforyouritemherelike: name=scrapy.Field() url=scrapy.Field()
settings.py:
#-*-coding:utf-8-*- #Scrapysettingsformsdnproject # #Forsimplicity,thisfilecontainsonlysettingsconsideredimportantor #commonlyused.Youcanfindmoresettingsconsultingthedocumentation: # #https://docs.scrapy.org/en/latest/topics/settings.html #https://docs.scrapy.org/en/latest/topics/downloader-middleware.html #https://docs.scrapy.org/en/latest/topics/spider-middleware.html BOT_NAME='msdn' SPIDER_MODULES=['msdn.spiders'] NEWSPIDER_MODULE='msdn.spiders' #Crawlresponsiblybyidentifyingyourself(andyourwebsite)ontheuser-agent #USER_AGENT='msdn(+http://www.yourdomain.com)' #Obeyrobots.txtrules ROBOTSTXT_OBEY=False #ConfiguremaximumconcurrentrequestsperformedbyScrapy(default:16) #CONCURRENT_REQUESTS=32 #Configureadelayforrequestsforthesamewebsite(default:0) #Seehttps://docs.scrapy.org/en/latest/topics/settings.html#download-delay #Seealsoautothrottlesettingsanddocs DOWNLOAD_DELAY=0.1 #Thedownloaddelaysettingwillhonoronlyoneof: #CONCURRENT_REQUESTS_PER_DOMAIN=16 #CONCURRENT_REQUESTS_PER_IP=16 #Disablecookies(enabledbydefault) #COOKIES_ENABLED=False #DisableTelnetConsole(enabledbydefault) #TELNETCONSOLE_ENABLED=False #Overridethedefaultrequestheaders: DEFAULT_REQUEST_HEADERS={ 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language':'en', 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36' } #Enableordisablespidermiddlewares #Seehttps://docs.scrapy.org/en/latest/topics/spider-middleware.html #SPIDER_MIDDLEWARES={ #'msdn.middlewares.MsdnSpiderMiddleware':543, #} #Enableordisabledownloadermiddlewares #Seehttps://docs.scrapy.org/en/latest/topics/downloader-middleware.html #DOWNLOADER_MIDDLEWARES={ #'msdn.middlewares.MsdnDownloaderMiddleware':543, #} #Enableordisableextensions #Seehttps://docs.scrapy.org/en/latest/topics/extensions.html #EXTENSIONS={ #'scrapy.extensions.telnet.TelnetConsole':None, #} #Configureitempipelines #Seehttps://docs.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES={ 'msdn.pipelines.MsdnPipeline':300, } #EnableandconfiguretheAutoThrottleextension(disabledbydefault) #Seehttps://docs.scrapy.org/en/latest/topics/autothrottle.html #AUTOTHROTTLE_ENABLED=True #Theinitialdownloaddelay #AUTOTHROTTLE_START_DELAY=5 #Themaximumdownloaddelaytobesetincaseofhighlatencies #AUTOTHROTTLE_MAX_DELAY=60 #TheaveragenumberofrequestsScrapyshouldbesendinginparallelto #eachremoteserver #AUTOTHROTTLE_TARGET_CONCURRENCY=1.0 #Enableshowingthrottlingstatsforeveryresponsereceived: #AUTOTHROTTLE_DEBUG=False #EnableandconfigureHTTPcaching(disabledbydefault) #Seehttps://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings #HTTPCACHE_ENABLED=True #HTTPCACHE_EXPIRATION_SECS=0 #HTTPCACHE_DIR='httpcache' #HTTPCACHE_IGNORE_HTTP_CODES=[] #HTTPCACHE_STORAGE='scrapy.extensions.httpcache.FilesystemCacheStorage'
pipelines.py:
#-*-coding:utf-8-*- #Defineyouritempipelineshere # #Don'tforgettoaddyourpipelinetotheITEM_PIPELINESsetting #See:https://docs.scrapy.org/en/latest/topics/item-pipeline.html classMsdnPipeline(object): def__init__(self): self.file=open('msdnc.csv','a+',encoding='utf8') defprocess_item(self,item,spider): title=item['name'] url=item['url'] self.file.write(title+'*'+url+' ') defdown_item(self,item,spider): self.file.close()
main.py(启动文件):
fromscrapy.cmdlineimportexecute execute(['scrapy','crawl','msdndown'])
3,成品打包地址点击进入:
猜你还喜欢
- 03-29 [编程相关] Winform窗体圆角以及描边完美解决方案
- 03-29 [前端问题] has been blocked by CORS policy跨域问题解决
- 03-29 [编程相关] GitHub Actions 入门教程
- 03-29 [编程探讨] CSS Grid 网格布局教程
- 10-12 [编程相关] python实现文件夹所有文件编码从GBK转为UTF8
- 10-11 [编程算法] opencv之霍夫变换:圆
- 10-11 [编程算法] OpenCV Camshift算法+目标跟踪源码
- 10-11 [Python] python 创建 Telnet 客户端
- 10-11 [编程相关] Python 基于 Yolov8 + CPU 实现物体检测
- 03-15 [脚本工具] 使用go语言开发自动化脚本 - 一键定场、抢购、预约、捡漏
- 01-08 [编程技术] 秒杀面试官系列 - Redis zset底层是怎么实现的
- 01-05 [编程技术] 《Redis设计与实现》pdf
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[美剧] 《女巫阿加莎》2024 [1080P BD][英语 中英双语字幕][1-9集全]
[美剧] 企鹅人 The Penguin (2024) 1080P 全8集完结
[电视剧] 我们在黑夜中相拥 (2024) 1080 横屏短剧 更24完结
[书籍] 经典科普书籍合集30套近300部·完美精校全插图收藏版
[电影] 狄仁杰之夺命妖僧(2024)【4K / HQ / 60帧 / 超高码率】【杜比5.1音效】【15.5G】
[电视剧] 春花 焰(2024)【完结】【4K / HQ / 60帧 / 超高码率】【杜比5.1音效】【刘学义/吴谨言】【256.4G】
[有声小说] 《才气横空》 主播:八零居士 505集完结【MP3】
[电影] 【珍藏版】20世纪电影合集从1922年到1990年代,看看爷爷辈的电影是什么样合集约212G
[资料] 【2024年军队文职公共科目/专业课/真题及押题卷】
[少儿教育] 唐诗三百首微电影(全314集)·少儿学唐诗
[书籍] 彭子益医书合集 [PDF/DOC]
[游戏] 《黑神话悟空》免安装学习版【全dlc整合完整版】+Steam游戏解锁+游戏修改工具!
[动画] 《名侦探柯南》名侦探柯南百万美元的五菱星 [TC] [MP4]
[动画] 2002《火影忍者》720集全【4K典藏版】+11部剧场版+OVA+漫画 内嵌简日字幕
[剧集] 《斯巴达克斯》1-4季合集 无删减版 1080P 内嵌简英特效字幕
[CG剧情] 《黑神话:悟空》158分钟CG完整剧情合集 4K120帧最高画质
[电影] 《变形金刚系列》七部合集 [4K HDR 蓝光] 国英双语音轨 [内封精品特效字幕]【典藏版】235G
[游戏] 黑神话悟空离线完整版+修改器
[动画] 西游记 (1999) 动画版 4K 全52集 高清修复版 童年回忆
[演唱会] 2024刀郎知交线上演唱会 2K [MP4]
[影视] 美国内战 4K蓝光原盘下载+高清MKV版/内战/帝国浩劫:美国内战(台)/美帝崩裂(港) 2024 Civil War 63.86G
[影视] 一命 3D 蓝光高清MKV版/切腹 / 切腹:武士之死 / Hara-Kiri: Death of a Samurai / Ichimei 2011 一命 13.6G
[影视] 爱情我你他 蓝光原盘下载+高清MKV版/你、我、他她他 2005 Me and You and Everyone We Know 23.2G
[影视] 穿越美国 蓝光原盘下载+高清MKV版/窈窕老爸 / 寻找他妈…的故事 2005 Transamerica 20.8G
[电影] 《黄飞鸿》全系列合集
[Android] 开罗游戏 ▎像素风格的模拟经营的游戏厂商安卓游戏大合集
[游戏合集] 要战便战 v0.9.107 免安装绿色中文版
[电影] 【珍藏版】20世纪电影合集从1922年到1990年代,看看爷爷辈的电影是什么样合集约212G
[书籍] 彭子益医书合集 [PDF/DOC]
[系统]【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载
- 最新评论
-
找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢285552528 评论于:11-09 找了好久的资源bjzchzch12 评论于:11-07 谢谢分享感谢ppy2016 评论于:11-05 谢谢分享感谢ppy2016 评论于:11-05 有靳东!嘻嘻奥古斯都.凯撒 评论于:10-28 流星花园是F4处女作也是4人集体搭配的唯一一部!奥古斯都.凯撒 评论于:10-28 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢AAAAA 评论于:10-26 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢password63 评论于:10-26 找了好久的资源,终于在这里找齐了!!!!blog001 评论于:10-21 找了好久的资源,终于在这里找齐了!!!!blog001 评论于:10-21
- 热门tag