斯巴鲁汽车 技术文档下载方法

昨天深夜,突然朋友找我帮忙,下载斯巴鲁的技术文档。原本以为是因为某些原因他访问不到国外的网站,结果却让我惊呆了!妈蛋,这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 # Pip install required packages and import them
 2 import lxml.html, urllib2, urlparse, os, requests, natsort, time
 3 from PyPDF2 import PdfFileMerger, PdfFileReader
 4
 5 # File Downloader
 6 def download_file(url, url_splitter=‘/‘):
 7     local_filename = url.split(url_splitter)[-1]
 8     # 这里是cookie的模拟方法,需要模拟登录
 9     headers = {
10         "Host": "techinfo.subaru.com",
11         "User-Agent": "lol",
12         "Cookie": "JSESSIONID=F3CB4654BFC47A6A8E9A1859F0445123"
13     }
14     r = requests.get(url, stream=True, headers=headers)
15     with open(local_filename, ‘wb‘) as f:
16         for chunk in r.iter_content(chunk_size=1024):
17             if chunk:
18                 f.write(chunk)
19                 f.flush()
20     return local_filename
21
22 # Grab all the PDFs
23 def grab_files(base_url):
24     res = urllib2.urlopen(base_url)
25     tree = lxml.html.fromstring(res.read())
26     ns = {‘re‘: ‘http://exslt.org/regular-expressions‘}
27     for node in tree.xpath(‘//a[re:test(@href, "\.pdf$", "i")]‘, namespaces=ns):
28         pdflink = urlparse.urljoin(base_url, node.attrib[‘href‘])
29         print pdflink
30         filename = download_file(pdflink)
31         print("Downloading " + filename + " complete\n")
32         print("sleep 72")
33         time.sleep(72)
34     return(0)
35
36 # Merge the PDFs
37 def merge_pdfs(merged_filename,files_dir=os.getcwd()):
38     pdf_files = natsort.natsorted([f for f in os.listdir(files_dir) if f.endswith("pdf")])
39     merger = PdfFileMerger()
40     for filename in pdf_files:
41         print("Merging " + filename)
42         merger.append(PdfFileReader(os.path.join(files_dir, filename), "rb"))
43     merger.write(os.path.join(files_dir, merged_filename))
44     print("Merge Completed - " + merged_filename)
45     return(merged_filename)
46
47 #这里是下载pdf的网页列表
48 grab_files(‘http://techinfo.subaru.com/search/listResults.html?searchLit=Search&litNum=G2520BE‘)
49 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

有问题欢迎留言。

时间: 2024-08-24 13:32:32

斯巴鲁汽车 技术文档下载方法的相关文章

[Java] Java API文档下载方法

Java API文档下载方法:http://jingyan.baidu.com/article/a3aad71ac9e48fb1fb009692.html Oracle : http://www.oracle.com/index.html

Oracle官网JDK的API离线文档下载方法

最近在学习JAVA开发,使用频率最高的工具莫过于JAVA API,当我们身边没有可连接的网络,而又急需API文档时候,很明显我们需要在我们的电脑存储一份离线文档.下面是去Oracle官网下载API Documentation的步骤: 0.在地址栏输入http://www.oracle.com/index.html 进入Oracle官网,如下图: 1.把鼠标移到Downloads那里,不要点它哦!会看到展开一系列Oracle的产品下载,注意到第一列有个叫做“Popular Downloads” 红

Java开源生鲜电商平台-技术方案与文档下载(源码可下载)

说明:任何一个好的项目,都应该有好的文档与设计方案,包括需求文档,概要设计,详细设计,测试用例,验收报告等等,类似下面这个图: 有以下几个管理域: 1. 开发域. 2. 管理域 3. 基线域 4. 产品域 1.  开发域包括以下几个维度: 例如:需求开发中,应该包括以下几个文档: 2,系统设计中又包括: 3. 基线域 其中需求基线又包括: 化状态:A--增加,M--修改,D--删除 目录 1       项目简介..........................................

35、生鲜电商平台-技术方案与文档下载

说明:任何一个好的项目,都应该有好的文档与设计方案,包括需求文档,概要设计,详细设计,测试用例,验收报告等等,类似下面这个图: 有以下几个管理域: 1. 开发域. 2. 管理域 3. 基线域 4. 产品域 1.  开发域包括以下几个维度: 例如:需求开发中,应该包括以下几个文档: 2,系统设计中又包括: 3. 基线域 其中需求基线又包括: 化状态:A--增加,M--修改,D--删除   目录 1       项目简介........................................

d3js技术文档

D3js技术文档 概述 D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to cr

如何快速阅读并理解英文的技术文档

作为一名程序员,要实现我们的产品,首先需要选择一种或几种编程语言,其次是使用各种工具和第三方库. 而在这个过程中,就少不了对这些语言.工具和第三方库的下载和学习. 下载一般都非常简单,但是关于如何使用,相信大家都会有各种各样的学习方法. 但是不管通过什么方式,追根溯源都会来到官方文档. 那么问题就来了!目前来说,大部分的官方文档都是英文的,如何才能快速的理解并使用官方文档呢? 今天,把自己的学习方法拿出来,和大家一起分享一下,希望大家可以尽量少走一些弯路,尽快的找到bug的解决方法. 说起来很简

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用

Atitit usrQBK1600 技术文档的规范标准化解决方案

1.1. Keyword关键词..展关键词,横向拓展比较,纵向抽象细化拓展知识点1 1.2. 标题必须有高大上词汇,参考文章排行榜,1 1.3. 标题带语言关键词c#.net js javascript  c++ python1 1.4. 标题最好有英文版本的,方便英文查询1 1.5. 标题atitit前缀,attilax总结结尾方便查询1 1.6. 标题后面带上版本号v2 qbf等,方便时间对比1 1.7. 正文要求 修辞好(引用典故名句,成语 等,使用修辞方法)2 1.8. 引用寓言故事 类

Xamarin技术文档------VS多平台开发

此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows Phone和Mac App.Xamarin由许多著名的开源社区开发者创立和参与,而且也是Mono项目的主导者--C#与.NET框架的开源.跨平台实现. 作为一个跨平台开发框架,Xamarin.Mobile有很多优点.在这一框架内