怎么知网能批量下载十几篇文章么导出知乎专栏的文章?

2020年11月29日 15:54--阅读 ·
--喜欢 ·
--评论看到太多的问题,如下:你是怎样保存、整理知乎好答案的?如何高效全流程整理好知乎答案的?如何下载知乎文章变成pdf,或者word有什么好办法可将知乎中的文章批量导出?拥有好东西就要学会分享知乎本来就是一个巨大的交流基地,每次遇到难题的时候,来到知乎总能寻找找到想要的答案,答疑解惑,如释重负我自己是一个创业者,每次看到对自己能力有提升的文章,总是如获至宝,迫不及待的收藏。但是每当自己再去查找时却已不见踪影,有的被封了;有的文章被删了;有的在收藏夹里,浑水摸鱼,找不到了。为了避免上面情况的发生,最佳的办法莫过于把喜欢的有用的有价值的文章全部下载到本地,保存到电脑上,再上传到印象笔记,或者有道云笔记,方便查阅学习。我之前也在网上查寻了各种工具下载,也尝试使用了一段时间,总体概况如下:下载的软件捆绑一大堆其它软件,整的乱七八糟,或者基本上就是蜗牛上树,等下载完,太阳已经下山了,要你何用?或者文章格式和原文排版已经面目全非,丑不拉几!下载的效果远远不能达到我的预期,一度质疑万能的互联网难道这么点要求都满足不了一颗上进的心。踏破铁鞋无觅处,得来全不费功夫。后来在我一个朋友的朋友圈找到了一个梦寐以求的工具今天也分享一下给大家,让你们也少走弯路!下载用了一段时间,确实很强大!!!具体的功能介绍,1、导出知乎网站上任意问答中的问题和回答内容,以及问题和回答的评论部分;2、导出指定用户下所有文章,包括文章内容和文章评论部分;3、导出格式以html格式为主,也可导出pdf和Word格式(推荐使用默认的html,html相当于本地的网页,可以永久的保存到你的电脑上);导出的文章如下:一些点评】1.最基本的采集文章和导出文章是非常完美的,导出了Word和pdf格式基本和原文排版一致,如果没有特别需要建议导出Html格式,和原文几乎一模一样的。图片也是直接下载本地,断网也能看文章是不是很棒的资源,快来学习吧!有需要的评论区找准楼主
这篇文章介绍获取 PDF 格式的论文。在知网页面的 html 中有下载链接,复制到搜索栏,确实是可以下载论文的,只需要获得作者,时间,题目以及下载链接就可以用循环结构批量下载论文。当然前提是,您本来就可以下载论文,不管是用VPN还是校园网。爬取网页后,只需要解析出来即可。我选择的方法是 正则搜索,虽然有点笨拙,但好在不管是什么信息,只要想搜索,总可以搜索到。1. 总体思路_首先_,获取源码,库:selenium,time ,用 webdriver 搜索按钮和输入栏,提交等等,遇到验证码手动输入即可,笔者输入了 8 次验证码,获取 6000 条论文_其次_,从源码中解析出作者,时间,Title,下载链接,储存到 Excel 中留存,日后可能有用,用到 re,pandas_再次_,利用 pandas,读取论文的链接,Title,用 requests 获取论文,利用 open 函数储存到 PDF 格式,在实践中发现,如果直接用解析的链接获取,下载得到的往往是 caj 格式文件,但是把 url 中的 ';' 换为 '&' 就可以正常下载 PDF 格式的文件了。用到 re,pandas_有了总的思路_,相信各位也可以自己写出定制的爬虫2. 解析前奏:获取页面的 htmlfrom selenium import webdriver
import time
import pandas as pd
url = r'http://new.gb.oversea.cnki.net/kns/brief/result.aspx?dbprefix=CJFQ' #给出链接
driver = webdriver.Firefox()
driver.get(url)
blank_ISSN = driver.find_element_by_id('magazine_value1')
#找到输入框。
id是我手动打开html,查看输入框源代码找到的,想提交别的条件一样操作即可
blank_ISSN.send_keys('0577-9154') #输入内容,期刊得SSN号码
buttom_search = driver.find_element_by_id('btnSearch') #找到搜索按钮
buttom_search.click() #点击搜索
time.sleep(2) #停一小会儿
driver.switch_to.default_content()
#找到子页面
driver.switch_to.frame('iframeResult')
#切换到iframe
#选择50个论文在一面显示
button_50=driver.find_element_by_xpath(r'/html/body/form/table/tbody/tr[1]/td/table/tbody/tr[1]/td/table/tbody/tr/td[2]/div[2]/a[3]')
button_50.click()
htmls = []
#遍历所有子页面,储存到这个列表
b = 1
#
while True:
try:
soup = BeautifulSoup(driver.page_source,'html.parser')
htmls.append(soup)
#储存好,点击下一页
time.sleep(random.randint(3,6))
#暂停一小会儿,这样封IP的概率会小一点,也少输入几次验证码
button_next = driver.find_element_by_id('Page_next')
button_next.click()
except
:
print('Error{}'.format(b))
time.sleep(60)
b = b+1
3. 解析一个 tr 标签的结构如下,其包含了一篇文章的全部信息: transfer_list=[]
#存储html源码的中转列表
for soups in htmls:
text = str(soups)
for i in soups.find_all('tr')[7:57]:
#在soup搜索出来的tr标签中,列表头尾都有冗余信息,删掉不要
transfer_list.append(i)
len(htmls)
#看一下爬出来多少的html,我的结果是135个html页面
raw_paper_infos = []
#用re匹配的思路是,第一步先缩小范围,第二步,精确搜索并删除多余的字符,下面是第一步
for i in transfer_list:
#遍历transfer_list中的每一个tr标签,其结构:[[一个tr标签包含的源码],[].……]
o=[]
#中转列表,储存第一步搜索出来的title,authors,发布时间,下载链接四个大致的匹配结果
paper = str(i)
#下面正则的表达式,都是我自己试出来的,有更好的方法欢迎留言
title = re.findall('target="_blank">.*</a>',paper)
authors = re.findall('target="knet">.*</a>',paper)
pub_year = re.findall('....-..-..',paper)
download_url = re.findall('briefDl_D" href=".*PDFdown',paper)
quoted_num1 = re.findall('scrollbars=yes.*</span',paper)
download_num = re.findall('onclick="SubCountDownLoad.*</a>',paper)
o=[title,authors,pub_year,download_url,quoted_num1,download_num]
raw_paper_infos.append(o)
#初步储存了全部的搜索信息
初步搜索出来的结果如下:raw_paper_infos[7]
#结构:[[trs],[],……]
[['target="_blank">消费行为在个人信用风险识别中的信息含量研究</a>'],
['target="knet">王正位</a>; <a class="KnowledgeNetLink" href="/kns/popup/knetsearchNew.aspx?sdb=CJFQ&amp;sfield=%e4%bd%9c%e8%80%85&amp;skey=%e5%91%a8%e4%bb%8e%e6%84%8f&amp;scode=08239051%3b34827180%3b08822321%3b08186170%3b" target="knet">周从意</a>; <a class="KnowledgeNetLink" href="/kns/popup/knetsearchNew.aspx?sdb=CJFQ&amp;sfield=%e4%bd%9c%e8%80%85&amp;skey=%e5%bb%96%e7%90%86&amp;scode=08239051%3b34827180%3b08822321%3b08186170%3b" target="knet">廖理</a>; <a class="KnowledgeNetLink" href="/kns/popup/knetsearchNew.aspx?sdb=CJFQ&amp;sfield=%e4%bd%9c%e8%80%85&amp;skey=%e5%bc%a0%e4%bc%9f%e5%bc%ba&amp;scode=08239051%3b34827180%3b08822321%3b08186170%3b" target="knet">张伟强</a>'],
['2020-01-16'],
['briefDl_D" href="../download.aspx?filename=4kXaYNFW0VEa4UzTFZXdJVlSvB3cHdXWrU0cKZ0VXllatB3ZaZVeUdESlxEePJHV3clQuVneGNkQSRXSKdHMvklS6Vzbv9WVwQWaENTdXJ0aOpFd4FzUSRGd3okW0Z1dx90SGljM5JVRwczRTdnSVl3Z3ImMrlVM&amp;tablename=CAPJLAST&amp;dflag=PDFdown'],
[],
['onclick="SubCountDownLoad(0,this)">264</a>']]
接下来继续完成匹配工作:精确匹配和删除多余字符:papers = []
#干净的匹配结果存放处
ilegal_word = ['/','\',''',':','|','?','*']
#考虑到后续下载时,保存文件会有一些非法字符导致文件名生成失败(windows不允许这些字符出现在文件名中)
for i in raw_paper_infos:
if not i == [[], [], [], [], [], []]:
#初步搜索时候,会有一些tr标签不是我们的论文标签,不符合初步搜索的要求,其结果就是空列表,过滤掉
raw_title = i[0][0].strip('target="_blank>~</a>')
chars = []
for x in raw_title:
if not x in ilegal_word:
chars.append(x)
title2 = ''.join(c for c in chars)
authors2 = ','.join(j for j in re.findall('[\u2E80-\u9FFF]+',str(i[1])))
#在join里面加一个符号就可以用这个符号链接加入进来的各个str了,nice try!
pub_year2 = i[2][0]
download_url2 = (i[3][0].strip('briefDl_D" href="..')).replace(';','&')
#按照';'连接就是caj格式的,'&'连接就是PDF格式的
if i[4] == []:
quoted_num2 = int(0)
else:
quoted_num2 = int(re.findall(r'>.*</a',str(i[4][0]))[0].strip('></a'))
#被引次数对于发表不久的论文,可能没有这一项,所以对于没有这一项的给0
download_num2 = int(re.findall(r'>.*<',i[5][0])[0].strip('><'))
#论文得下载次数
papers.append([title2,authors2,pub_year2,download_url2,quoted_num2,download_num2])
#到此为止,我们有了全部的所需要的信息
#储存到excel,以待候用
pd.DataFrame(papers).to_excel(root+r'\JJYJ论文信息汇总.xlsx')
输出的 Excel 文档长这样: 注:和代码部分有一点不一样,笔者自行输入了标题行,并且按照发表日期排序
注意: 下载链接不完整,下载时需要在前面加:http://new.gb.oversea.cnki.net/kns 。4. 下载论文的代码import pandas as pd
import requests,os
content = pd.read_excel(content_JJYJ)
#读取excel
content = content.drop(columns = ['Unnamed: 0','作者','被引次数','下载次数','截止日期:2020-2-6',"要下载论文,链接前接:'http://new.gb.oversea.cnki.net/kns'"])
#只保留title和下载链接,其余删掉
for i in range(len(content['题目'])):
#这是DataFrame中列的访问方式
title = content['题目'][i]
#第i篇论文的题目
text = requests.get(content['下载链接'][i]) #下载第i个论文
with open(root + '\\' + title + '.PDF' ,'wb') as f:
#给出保存地址以及open的模式是wb,写入字节
#因为下载的是字节,所以写入字节:wb
f.write(text.content)
f.close()
size = float(os.path.getsize(save_path))
kb = size/1024
#判断是不是下载成功了,小于7字节应该就是没下载到论文而是别的东西
if kb<7:
os.remove(save_path) #如果是,删除,以备后面重新下载
print('封IP了,暂停10min')
exceptions.append(paper)
time.sleep(300)
#下载失败的原因是封ip了,这时候暂停5-10min比较好
下载论文的主体部分就是这些了,后面可以加入 try/except 结构、跳过已经下载的论文等功能,但是程序主体就是这些,文章已经很长,再长不大好,所以写到这里,更多功能请大家依据需求添加。详细内容参见连享会推文专题:Python-R-Matlab Python: 批量爬取下载中国知网(CNKI) PDF论文 Note:产生如下推文列表的 Stata 命令为:. lianxh Python. songbl Python安装最新版 lianxh/ songbl 命令:. ssc install lianxh, replace. ssc install songbl, replace专题:数据分享 Python+Stata:如何获取中国气象历史数据专题:Stata入门 使用 Jupyter Notebook 配置 Stata\Python\Julia\R专题:Stata教程 Stata-Python交互-9:将python数据导入StataStata-Python交互-8:将Stata数据导入PythonStata-Python交互-7:在Stata中实现机器学习-支持向量机Stata-Python交互-6:调用APIs和JSON数据Stata-Python交互-5:边际效应三维立体图示Stata-Python交互-4:如何调用Python宏包Stata-Python交互-3:如何安装Python宏包Stata-Python交互-2:在Stata中调用Python的三种方式Stata-Python交互-1:二者配合的基本设定专题:Stata程序 Stata程序:是否有类似-Python-中的-zip()-函数专题:文本分析-爬虫 Stata+Python:爬取创历史新高股票列表Python:爬取东方财富股吧评论进行情感分析VaR 风险价值: Stata 及 Python 实现支持向量机:Stata 和 Python 实现Python爬虫: 《经济研究》研究热点和主题分析专题:Python-R-Matlab Python:多进程、多线程及其爬虫应用Python:爬取动态网站Python爬取静态网站:以历史天气为例Python:绘制动态地图-pyechartsPython爬虫1:小白系列之requests和jsonPython爬虫2:小白系列之requests和lxmlPython爬虫:爬取华尔街日报的全部历史文章并翻译Python爬虫:从SEC-EDGAR爬取股东治理数据-Shareholder-ActivismPython:爬取巨潮网公告司继春:Python学习建议和资源Stata交互:Python-与-Stata-对比Python:拆分文件让百万级数据运行速度提高135倍Python+Stata:批量制作个性化结业证书Python+Wind:用 Pyautogui 轻松下载 Wind 数据Python:爬取上市公司公告-Wind-CSMARPython: 如何优雅地管理微信数据库?Python: 6 小时爬完上交所和深交所的年报问询函Python: 使用正则表达式从文本中定位并提取想要的内容Python 调用 API 爬取百度 POI 数据Python 调用 API 进行逆地理编码Python 调用 API 进行地理编码Python: 批量爬取下载中国知网(CNKI) PDF论文专题:其它 ES 期望损失: Stata 及 Python 实现
摘要:知乎大v专栏下载,知乎大v问答采集及图文下载,知乎大v专栏视频采集下载,知乎大v专栏回答列表文章采集及图文下载,知乎大v专栏列表及文章采集及图文下载。今天来评测一下这款专门下载知乎文章的工具:根据网站介绍:这款工具,可以实现对 知乎文章采集及图文下载(可下载专栏列表、文章、回答列表、单个回答、视频列表等,用于将相应的链接放在指定文本当中运行软件即可下载,下载下来的图文效果同网站。我们来看一下,这个软件的介绍(B站直达):https://www.bilibili.com/video/BV1pF411a7N8?spm_id_from=333.999.0.0然后,我们到软件下载页面( 下载地址)下载一下,软件是绿色版本,下载解压后运行即可。Zhihu文章采集助手v2.20-全功能版 软件界面软件的界面很简单,看了一下使用提示,一目了然,然后我们把相关的链接放到软件目录下,链接我们放置了不同频道的,以测试其兼容性。看是否可以自动识别,并能采集下载。运行:我们看软件能自动识别不同的链接,并对相应的链接进行自动下载。下载大v回答文章的界面这是下载好的某大v的回答文章列表我们打开其中一篇,看图文排版都很OK可以看到,这款软件还是很好的实现了对于知乎不同页面复杂的页面元素的兼容,并能将网站上不必要的js以及不相关的信息菜单等进行了去除。只保留了纯净的内容信息,并进行了很好的排版,非常适合我们进行收藏及阅读。文章来源:想要收藏知乎的文章,想要采集知乎大v的文章,给大家安利一下这款专门采集下载的工具软件 – 富泰科 (futaike.net)

我要回帖

更多关于 知网能批量下载十几篇文章么 的文章

 

随机推荐