斯巴鲁汽车 技术文档下载方法
2016-01-25 17:16
211 查看
昨天深夜,突然朋友找我帮忙,下载斯巴鲁的技术文档。原本以为是因为某些原因他访问不到国外的网站,结果却让我惊呆了!妈蛋,这pdf有1000多个啊···
朋友在国外的论坛上找到有人可以下载,而且已经贴上了源码,只是他不懂。
论坛地址为:http://www.subaruoutback.org/forums/138-gen-5-2015-present/280682-2016-owner-s-service-manuals-posted.html
这是文档下载的网站:http://techinfo.subaru.com/index.html
其中账号是要钱买的,好新颖的设定:
72 Hours (3 days) @ $34.95
30 Days @ $299.95
365 Days (1 year) @ $2499.95
另:他们规定,账号下载pdf,不得超过每小时50个文件···坑爹啊···
我借用他们的代码(二楼的代码,用python写的那个;十五楼的时间机制,用来防止超过1小时50次的限制),结合现在的情况改动了部分。
现在分享给各位需要的人。
我的python环境是Python 2.7.10的。使用3.4版本的需要改部分代码,修改的只是包名和部分包名下面的方法名,都是简单的操作。
下面上代码~
解析一下:
1. 第12行的cookie,需要借用浏览器,然后找到cookie来做。简单的就是用chrome浏览器。如下图:
2. 第48行,其中的连接地址就是你需要下载的pdf文档的地址。斯巴鲁的pdf下载好像是在搜索页面中才能出现的。略奇葩啊···
3. 第49行,是合并pdf的代码,毕竟1000+个文档,分开放着够乱啊···(当然也可以选择不合并)
好啦,至此就可以运行代码跑跑跑啦~
如果使用python 3.4,代码修改的时候,请注意:
1. 引用urllib2应该是需要改为引用urllib,官网可以查到urblib2被改为了urllib3,但是在实际使用的时候,我记得后面有个方法又需要把他改为urllib;
2. lxml在引用的时候可能会出现比较大的问题,可以直接下载已经编译好的包。http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
有问题欢迎留言。
朋友在国外的论坛上找到有人可以下载,而且已经贴上了源码,只是他不懂。
论坛地址为:http://www.subaruoutback.org/forums/138-gen-5-2015-present/280682-2016-owner-s-service-manuals-posted.html
这是文档下载的网站:http://techinfo.subaru.com/index.html
其中账号是要钱买的,好新颖的设定:
72 Hours (3 days) @ $34.95
30 Days @ $299.95
365 Days (1 year) @ $2499.95
另:他们规定,账号下载pdf,不得超过每小时50个文件···坑爹啊···
我借用他们的代码(二楼的代码,用python写的那个;十五楼的时间机制,用来防止超过1小时50次的限制),结合现在的情况改动了部分。
现在分享给各位需要的人。
我的python环境是Python 2.7.10的。使用3.4版本的需要改部分代码,修改的只是包名和部分包名下面的方法名,都是简单的操作。
下面上代码~
# Pip install required packages and import them import lxml.html, urllib2, urlparse, os, requests, natsort, time from PyPDF2 import PdfFileMerger, PdfFileReader # File Downloader def download_file(url, url_splitter='/'): local_filename = url.split(url_splitter)[-1] # 这里是cookie的模拟方法,需要模拟登录 headers = { "Host": "techinfo.subaru.com", "User-Agent": "lol", "Cookie": "JSESSIONID=F3CB4654BFC47A6A8E9A1859F0445123" } r = requests.get(url, stream=True, headers=headers) with open(local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk: f.write(chunk) f.flush() return local_filename # Grab all the PDFs def grab_files(base_url): res = urllib2.urlopen(base_url) tree = lxml.html.fromstring(res.read()) ns = {'re': 'http://exslt.org/regular-expressions'} for node in tree.xpath('//a[re:test(@href, "\.pdf$", "i")]', namespaces=ns): pdflink = urlparse.urljoin(base_url, node.attrib['href']) print pdflink filename = download_file(pdflink) print("Downloading " + filename + " complete\n") print("sleep 72") time.sleep(72) return(0) # Merge the PDFs def merge_pdfs(merged_filename,files_dir=os.getcwd()): pdf_files = natsort.natsorted([f for f in os.listdir(files_dir) if f.endswith("pdf")]) merger = PdfFileMerger() for filename in pdf_files: print("Merging " + filename) merger.append(PdfFileReader(os.path.join(files_dir, filename), "rb")) merger.write(os.path.join(files_dir, merged_filename)) print("Merge Completed - " + merged_filename) return(merged_filename) #这里是下载pdf的网页列表 grab_files('http://techinfo.subaru.com/search/listResults.html?searchLit=Search&litNum=G2520BE') merge_pdfs('2016_Outback_Legacy_Manual.pdf')
解析一下:
1. 第12行的cookie,需要借用浏览器,然后找到cookie来做。简单的就是用chrome浏览器。如下图:
2. 第48行,其中的连接地址就是你需要下载的pdf文档的地址。斯巴鲁的pdf下载好像是在搜索页面中才能出现的。略奇葩啊···
3. 第49行,是合并pdf的代码,毕竟1000+个文档,分开放着够乱啊···(当然也可以选择不合并)
好啦,至此就可以运行代码跑跑跑啦~
如果使用python 3.4,代码修改的时候,请注意:
1. 引用urllib2应该是需要改为引用urllib,官网可以查到urblib2被改为了urllib3,但是在实际使用的时候,我记得后面有个方法又需要把他改为urllib;
2. lxml在引用的时候可能会出现比较大的问题,可以直接下载已经编译好的包。http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
有问题欢迎留言。
相关文章推荐
- Android AIDL SERVICE 双向通信 详解
- (原+转)VS2013:正在从以下位置加载符号
- 关于 Java 数组的 12 个最佳方法
- 【Eclipse】--Eclipse简介和安装
- 简单网络命令
- javascript实现2016新年版日历
- 数据从HDFS导入hive
- ACID、Data Replication、CAP与BASE
- LeetCode总结2-Linked List
- quicklua随机数
- AngularJS中的transclusion案例
- adb常用命令
- 摘抄java基础
- la a669 youtSubviews总结
- Android Studio一步步教你集成发布适配
- 面试笔试杂项积累-leetcode 1-5
- 获取manifest清单文件的meta-data数据
- Visual Basic 程序设计
- kafka基本概念
- [转]Tesseract-OCR (Tesseract的OCR引擎最先由HP实验室于1985年开始研发)