python爬虫爬取ftp上压缩文件保存到本地 -- xpath

import requests
from lxml import etree
import os


class TarenaCodeSpider(object):
	def __init__(self):
		self.url = 'http://code.tarena.com.cn/AIDCode/aid1907/13-Redis/'
		self.auth  =('tarenacode','code_2013)

	def parse_htnl(self):
	
		#1.创建文件夹,绝对路径
		directory  = '/home/tarena/' + '/'.join(self.url.split('/')[3:])
		if not os.path.exists(directory):
			os.makedirs(directory)
			
		#2.请求,解析提取href的值
		#请求一级页面html内容
		html = requests.get(url=self.url,auth=self.auth,headers={'User-Agent':'Mozilla/5.0'}.text
		#创建解析对象
		p = etree.HTML(html)
		#使用xpath表达式匹配出文件名,返回值为['xxx','文件名','xxx.zip']
		href_list = p.xpath('//a/@href')
		for href in href_list:
			#筛选出压缩文件
			if href.endswith('.zip') or href.endswith('.rar'):
				#下载压缩文件
				self.download(href,directory)
				
	#具体下载文件的函数
	def download(self,href,directory):
		#拼接文件的url:文件url=文件夹url+文件名
		file_url = self.url + href
		#请求二级页面(文件)响应,文件是非结构化数据,以content取
		html = requests.get(url=file_url,auth=self.auth,headers={'User-Agent':'Mozilla/5.0'}.content
		#拼接文件名:/home/tarena/AIDCode/aid1907/13-Redis/redis_day01.zip
		filename = directory + href
		with open(filename,'wb') as f:
			f.write(html)
		print(filename,'下载成功')

	def run(self):
		self.parse_html()

if __name__ == '__main__':
	spider = TarenaCodeSpider()
	spider.run()

你可能感兴趣的:(spider,#python)