国外最新高清pdf寻找以及实现迅雷自动下载【Python】


title: 国外最新高清pdf寻找以及实现迅雷自动下载【Python】
date: 2016-10-11 20:59:28
tags:


国外最新高清pdf寻找以及实现迅雷自动下载#

1、今天意外发现国外某站,提供非常近期,甚至国内亚马逊还没上市的最新高清pdf,所以测试爬虫,看是否能自动下载。

2、

《OReilly.Introduction.to.Machine.Learning.with.Python.A.Guide.for.Data.Scientists.1449369413》

一开始人工下载成功, 国内要月底才上线呢。

3、 随后测试程序是否可自动下载,第二本书的下载遇到了问题:总提示服务器维护,但更换了ip也这样的结果,后发现是对应网盘异常了。

4、代码:

# -*- coding: utf-8 -*-
# python 3.5.2
# 测试系统,Win10,Firefox V46
# Author:Van
# 实现自动下载高清最新pdf的实现
# V1.0 当前只针对效果还可以的国外zippyshare网盘
# 其他的网盘还没添加进判断语句,先共享如何迅雷下载等
# 如果您有经验优化,改进此脚本,请不吝指教
# QQ群: 206241755
# 简介:因下载最新高清pdf,正好发现www.foxebook.net提供
# 但是很多的广告,特烦人,所以尝试脚本,最后因下载需求,
# 加载了迅雷,这功能的实现小牛,不过也是网络别人共享的。。

from selenium import webdriver
import requests
from lxml import etree
import re
import os
from win32com.client import Dispatch



#test name of book : SciPy and NumPy
# book_name = input('Please input the book name in English:\n')
book_name = 'Introduction to Machine Learning with Python'
print ('begin to search book(s)...')
print ('---------------------------------')
# search link is :http://www.foxebook.nethttp://www.foxebook.net/search/SciPy%20and%20NumPySciPy%20and%20NumPy
PostUrl = "http://www.foxebook.net/search/" + book_name
# print(PostUrl)
# get the content of html
html = requests.get(PostUrl).content

# use etree selector
selector = etree.HTML(html)

# /html/body/div/div/main/div[2]/div[2]/h3/a
# /html/body/div/div/main/div[3]/div[2]/h3/a
# above is two books' xpath, so the right xpath for all book is :
# /html/body/div/div/main//div[2]/h3/a
# it can be confirmed by 'xpath checker'
total_books = selector.xpath("/html/body/div/div/main//div[2]/h3/a/text()")
# print('total books from searching are:', total_books)

num1 = 0
link_address = []
real_address = []
def find_link():
    global num1
    # find the right book, put all links in a list of : link_address

    for i in total_books:
        num1 += 1
        if re.search(book_name,i):

            print('Congrdulations, we find the book(s):\n')
            print ('**********************************')
            print(i)
            print ('**********************************\n')
            href = 'http://www.foxebook.net' + selector.xpath('//*[@id="content"]/div/main/div[%d]/div[2]/h3/a/@href'%num1)[0]
            # print('the book link is :', href)
            # print('will downloading...')
            html_new = requests.get(href).content
            selector_new = etree.HTML(html_new)
            link_new = selector_new.xpath('//*[@id="download"]/div[2]/table/tbody/tr[1]/td[2]/a/@href')[0]
            # split the next link
            link_new = 'http:'+link_new.split(':')[-1]
            link_address.append(link_new)
    print('download link is :', link_address)
    print('\n\n')

def real_book_link():
    # print('link_address is :', link_address)
    # dynamic on zippyshare
    for j in link_address:
        # 用浏览器实现访问

        driver = webdriver.Firefox()
        driver.maximize_window()
        driver.get(j)


        try:

            # find the download button
            title_list = driver.find_element_by_xpath('//*[@id="dlbutton"]')
            film_link = title_list.get_attribute('href')
            real_address.append(film_link)

        except:
            print('can not download the book')

    print('real_book_link:', real_address)
    return real_address

def addTasktoXunlei(down_url,course_infos):
    flag = False
    o = Dispatch("ThunderAgent.Agent.1")
    if down_url:
        course_path = os.getcwd()
        try:
            #AddTask("下载地址", "另存文件名", "保存目录","任务注释","引用地址","开始模式", "只从原始地址下载","从原始地址下载线程数")
            o.AddTask(down_url, '', course_path, "", "", -1, 0, 5)
            o.CommitTasks()
            flag = True
        except Exception:

            print(Exception.message)
            print(" AddTask is fail!")
    return flag

if __name__ == '__main__':
    find_link()
    real_link = real_book_link()
    for i in real_link:
        addTasktoXunlei(i, course_infos=None)

5、第二天分析:
更换下载的书名为:《Introduction to Machine Learning with Python》

得到了2个有效的书籍目录,对比昨天的书籍名,发现提供的下载源是不同的国外网盘,而昨天的那个到今天一直打不开,而这本书的网址很快就打开了,网盘名字为: zippyshare.com

然后研究了下,此foxebook.net站点提供的一些网盘下载使用了多家国外网盘,并且各家的广告显示不尽相同,可靠性更是差别较大。

另外,发现,就SciPy and NumPy一书来说,他最后得到的地址有2个http,这应该是广告模式,而后者的http的内容是我们真实需要的,所以通过冒号:来切分a.split(':')[-1]。

In [10]: a = 'http://sh.st/st/7a45e8ed9f73a6a10e9a22b2d8783c44/http://www65.zippyshare.com/v/oFSWQWDk/file.html'

In [11]: a
Out[11]: 'http://sh.st/st/7a45e8ed9f73a6a10e9a22b2d8783c44/http://www65.zippyshare.com/v/oFSWQWDk/file.html'

In [12]: a.split(':')[-1]
Out[12]: '//www65.zippyshare.com/v/oFSWQWDk/file.html'

6、忘记说明下昨天的代码为何要用re.match (或者re.research), 这是因为网站的关键词搜索引擎所使用的算法,我们是不知道的,但从搜索结果看,某关键词下,可能有不同的书籍,而我们是需要精确搜索,下图中实际出现了16本书,但针对SciPy and NumPy,我们要找的是第三个图对应的。因此,我们可以把显示的书名做一个match对照的循环,来实现精确匹配。而另外一方面,网站提供的书名还可能多了冒号,后面附加书名,这样的也符合我们的要求。后来发现用关键词 if xxx in yyy的方式更简便。

7、昨天的代码一开始没有考虑到国外网盘下载异常失败的问题,并且有的搜索结果可能有多个网盘地址,而我只取了默认的第一个,考虑到下载的失败可能性,最好把所有下载地址都获取。所以代码需要修改。
由于:SciPy and NumPy 对应的网盘当机,选用:《Introduction to Machine Learning with Python》为例

经过对照,在最后的下载界面,是动态的,因为调用selenium+Firefox组合。最后终于得到了完整pdf队中的链接,但速度明显比较慢了,在本例中,是rar后缀的压缩包格式,里面含有pdf。

download link is : ['http://www78.zippyshare.com/v/hBU7JYZp/file.html', 'http://www65.zippyshare.com/v/oFSWQWDk/file.html']



content: 
book link: http://www78.zippyshare.com/d/hBU7JYZp/2248094/OReilly.Introduction.to.Machine.Learning.with.Python.A.Guide.for.Data.Scientists.1449369413.rar
content: 
book link: http://www65.zippyshare.com/d/oFSWQWDk/1124867/OReilly.Introduction.to.Machine.Learning.with.Python.1449369413_Early.Release.rar

Process finished with exit code 0

8、接下来的一个问题,怎么让程序自动下载这2个链接?群里有人推荐了一些别的软件,但是我想来想去因为以后总要面对下载速度的问题,还是选定了迅雷破解版吧,除非将来有其他更好的方案,好在有人共享了一个方案,还特别简单,不过据说只能支持http格式,BT格式的以后再想办法。

9:补充说明,在正文代码的第2个下载地址,是有问题的,差别在于地址点击后,前者可在浏览器或者迅雷直接下载,而后者浏览器没反映,迅雷里下载的是一个html。尽管2个链接的提取方法完全一样,但一个好使,一个异常,由于是同一本书的前后2个小版本,我也不管他了,但为了验证迅雷是否能同时下载5个(代码里设定同时下载的最大值,也是一般默认值) 我用额外的测试脚本加载了一个新的链接,是证明可同时下载的,如图:

9、参考:

http://neue.v2ex.com/t/275703

10、github对应仓库:

https://github.com/vansnowpea/download-pdf-with-Xunlei

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容