python抓取服务器文件,python爬虫 | 爬取开放服务器的文件

1.任务背景

数据如图所示:

1d79e61cfb048cffb500de6196dc1c1a.png

在浏览器中打开对应的某个ftp链接,如下图所示,目标是将其中红框中的压缩包下载下来,一个ftp下载一个,一条数据对应下载两个压缩包:

8779570e22401fe44701653249cc4d21.png

2.数据预处理

def changePre(data): #更换url前缀为https hurlsGen=[] #存放所有转换完成的Gen FTP链接 hurlsRef=[] #存放所有转换完成的Ref FTP链接 i=0 while i

3.得到每条转换后的url对应的HTML代码 def getHTMLText(url, code="utf-8"): #得到转换后的每条url对应的HTML代码 try: r = requests.get(url) r.raise_for_status() r.encoding = code return r.text except: return ""

4.分析网页源码

2fc2c044d9515a73734963dc89076410.png

如上图所示,可以发现代码非常简单,所有文件链接都在a标签中。

5.解析HTML代码,提取指定下载文件的文件名。 def parseHTMLText(html): #解析网页源码,提取指定下载文件的文件名 doc=pq(html) #用pyquery提取a标签 a=doc('a') filename='RNG' #默认文件名为RNG for item in a.items(): #遍历所有提取的a标签,根据href属性值,找到指定的下载文件的文件名 if 'protein.gpff.gz' in item.attr('href'): filename=item.attr('href') print(filename) return filename

6.提取待下载的文件,并写在本地文件夹中 def writeFile(basicUrl,filename,filepath,count): filepath1='{0}/{1}'.format(filepath,str(count)+'_'+filename)#本地写入路径 if not os.path.exists(filepath1): with open(filepath1,'wb') as f: file=requests.get(basicUrl+filename) #指定文件的下载链接 if file.status_code==200: #可能有的链接不含指定文件 此时会生成一个空文件,文件名为:序号_RNG f.write(file.content)

7.全部代码: #-*- coding:utf-8 -*- import requests import os from pyquery import PyQuery as pq import pandas as pd from multiprocessing import Pool def getHTMLText(url, code="utf-8"): #得到转换后的每条url对应的HTML代码 try: r = requests.get(url) r.raise_for_status() r.encoding = code return r.text except: return "" def parseHTMLText(html): #解析网页源码,提取指定下载文件的文件名 doc=pq(html) #用pyquery提取a标签 a=doc('a') filename='RNG' #默认文件名为RNG for item in a.items(): #遍历所有提取的a标签,根据href属性值,找到指定的下载文件的文件名 if 'protein.gpff.gz' in item.attr('href'): filename=item.attr('href') print(filename) return filename def writeFile(basicUrl,filename,filepath,count): filepath1='{0}/{1}'.format(filepath,str(count)+'_'+filename)#本地写入路径 if not os.path.exists(filepath1): with open(filepath1,'wb') as f: file=requests.get(basicUrl+filename) #指定文件的下载链接 if file.status_code==200: #可能有的链接不含指定文件 此时会生成一个空文件,文件名为:序号_RNG f.write(file.content) def changePre(data): #更换url前缀为https hurlsGen=[] #存放所有转换完成的Gen FTP链接 hurlsRef=[] #存放所有转换完成的Ref FTP链接 i=0 while i

8.问题:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值