文泉学堂以清华大学出版社的特色内容为基础,聚合高等教育专业知识性内容,突出理工、计算机、经管等专业学科,引入知识图谱体系,将内容资源按知识点关联,为用户提供个性化的专业知识服务,包括知识内容的个性化搜索、订阅、推荐、阅读、学习,方便用户之间的交流和分享。
网址:
https://lib-nuanxin.wqxuetang.com/#/
因新冠状病毒引发肺炎疫情影响,清华大学对外开放知识库,至开学前(2月16日)全国用户可免费免登陆进入“文泉学堂”网站,这是隶属于清华大学出版社的在线学习平台,高质量的教学内容资源可用于学生自主学习,教师也是通过该网站在线教学或进行辅助指导。
官网显示可免费阅读至2月29号,感谢!
有不少2019年比较新的书籍,尤其适合计算机专业相关阅读!
请尊重版权!
代码仅供参考和学习!
切勿商用和广泛传播。-_- 利用python3自动下载温泉学堂的pdf书籍(仅供测试,请24小时内删除)
Python selenium 配置
第一步:安装 selenium
pip install selenium
第二步:Webdriver、geckodriver下载配置
Webdriver下载路径:
http://chromedriver.storage.googleapis.com/index.html
用于驱动打开Chrome;
geckodriver下载路径:
https://github.com/mozilla/geckodriver/releases
用于驱动打开Firefox;
下载后放在python.exe相同目录下:
这里我用的谷歌浏览器!
系统为win7 64位!
百度云打包:
链接:
https://pan.baidu.com/s/1P3RlJkCRCCsVca3tzgQiig
提取码:
37bt
附完整源码:
#20200202 #文泉学堂电子书抓取 https://lib-nuanxin.wqxuetang.com/search?kw=Python # -*- coding=utf-8 -*- import requests,time,os from fake_useragent import UserAgent from selenium import webdriver from lxml import etree #下载图片 def bctp(img_url, img_name,pdfurl,path): ua = UserAgent() headers={ 'User-Agent': ua.random, 'Referer': pdfurl } print("开始下载图片!") try: r = requests.get(img_url, timeout=5, headers=headers) with open(f'{path}{img_name}', 'wb') as f: f.write(r.content) print(f'下载{img_name}图片成功!') time.sleep(1) except Exception as e: if "port=443): Read timed out" in str(e): time.sleep(2) #下载电子书图片 def xztp(imgreq,i,pdfurl,path): img = imgreq.xpath(f'//div[@index="{i}"]/img[@class="page-img"]/@src')[0] if 'http' not in img: img_url = f'https://lib-nuanxin.wqxuetang.com{img}' else: img_url = img print(img_url) img_name = f'{i}.jpg' bctp(img_url, img_name, pdfurl, path) #下载电子书单页 def xz(browser,pdfurl,i,path): browser.get(f'{pdfurl},{i}') time.sleep(8) imghtml = browser.page_source imgreq = etree.HTML(imghtml) pagenum = imgreq.xpath('//div[@class="fl page-head-page"]/div[@class="page-head-tol"]/text()')[0] page = pagenum.split('/')[0] if str(i) in page: xztp(imgreq, i, pdfurl, path) else: time.sleep(2) browser.get(f'{pdfurl},{i}') time.sleep(8) imghtml = browser.page_source imgreq = etree.HTML(imghtml) pagenum = imgreq.xpath('//div[@class="fl page-head-page"]/div[@class="page-head-tol"]/text()')[0] page = pagenum.split('/')[0] if str(i) in page: xztp(imgreq, i, pdfurl, path) else: time.sleep(2) browser.get(f'{pdfurl},{i}') time.sleep(8) imghtml = browser.page_source imgreq = etree.HTML(imghtml) xztp(imgreq, i, pdfurl, path) #下载电子书 def get_pagenum(browser,pdfurl,pdftitle): path = f'{pdftitle}/' os.makedirs(path, exist_ok=True) # 创建目录 browser.get(pdfurl) time.sleep(2) # 滚动页面 js = "var q=document.documentElement.scrollTop=1000" browser.execute_script(js) time.sleep(5) pdfhtml = browser.page_source print(pdfhtml) pdfreq = etree.HTML(pdfhtml) pagenum = pdfreq.xpath('//div[@class="fl page-head-page"]/div[@class="page-head-tol"]/text()')[0] pagenum = pagenum.split('/')[1] pagenum = pagenum.replace(' ', '') pagenum = int(pagenum) print(pagenum) for i in range(1, pagenum + 1): print(i) xz(browser,pdfurl,i,path) time.sleep(1) #获取电子书目录 def getpdf(browser,url): browser.get(url) # 将滚动条移动到页面的底部 js = "var q=document.documentElement.scrollTop=100000" browser.execute_script(js) time.sleep(5) #获取当前网页源码 html=browser.page_source #解析网页 req=etree.HTML(html) h3s=req.xpath('//div[@class="in-r"]/h3/@title') imgs=req.xpath('//div[@class="item-cover fl"]/img/@src') for h3,img in zip(h3s,imgs): pdftitle=h3 id=img.split('/')[-2] pdfurl=f'https://lib-nuanxin.wqxuetang.com/read/pdf/{id}' print(pdftitle,pdfurl) get_pagenum(browser, pdfurl, pdftitle) #列表抓取 def main1(): browser = webdriver.Chrome() url="https://lib-nuanxin.wqxuetang.com/search?kw=python%20gui" getpdf(browser, url) #单本书抓取 def main2(): browser = webdriver.Chrome() pdftitle="零基础入门学习Python(第2版)-微课视频版" pdfurl = "https://lib-nuanxin.wqxuetang.com/read/pdf/3207820" get_pagenum(browser, pdfurl, pdftitle) #单页抓取 def main3(i): browser = webdriver.Chrome() pdfurl="" path="" xz(browser, pdfurl, i, path) if __name__=='__main__': main2()
抓取效果:
bug:
1.可能存在小图抓取情况!
2.爬取速度过慢!!!
以上仅供参考和学习!
另附大佬的分享,不妨使用一下!
https://github.com/kajweb/wqxuetang_downloader
喜欢的书籍,还是推荐购买,支持正版!