python爬取会议论文pdf_【python2.7】爬取知网论文

# -*- coding: utf-8 -*-

import time

import urllib

import urllib2

import cookielib

from lxml import etree

import random

'''

爬取第一页,获取共页数

爬取第二页至最后一页

'''

# 下载当前页所有文章的pdf或caj

def download_paper(treedata, opener, localdir):

'''

传入参数:

treedata:当前列表页的treedata数据

opener: referer已修改为当前页

localdir: 保存目录

'''

tr_node = treedata.xpath("//tr[@bgcolor='#f6f7fb']|//tr[@bgcolor='#ffffff']")

for item in tr_node:

paper_title = item.xpath("string(td/a[@class='fz14'])")

paper_link = item.xpath("td/a[@class='fz14']/@href")

paper_author = item.xpath("td[@class='author_flag']/a/text()")

paper_source = item.xpath("td[4]/a/text()")

paper_pub_date = item.xpath("td[5]/text()")

paper_db = item.xpath("td[6]/text()")

paper_cited = item.xpath("td[7]//a/text()")

paper_download_count = item.xpath("td[8]/span/a/text()")

print paper_title

print paper_link

# 获取paper详情页面链接,访问详情页前,要设置referer

paper_detail_url_fake = "http://kns.cnki.net" + paper_link[0]

response = opener.open(paper_detail_url_fake)

paper_detail_page_treedata = etree.HTML(response.read())

# 下载前要设置referer为详情页

opener.addheaders = [("Referer", response.url)]

# 硕士论文并没有【pdf下载】的链接

pdf_download_url = paper_detail_page_treedata.xpath('//*[@id="pdfDown"]/@href')

if len(pdf_download_url) == 0:

whole_book_download_url = paper_detail_page_treedata.xpath('//*[@id="DownLoadParts"]/a[1]/@href')

download_url = whole_book_download_url[0]

filename = localdir + paper_title + ".caj"

else:

download_url = pdf_download_url[0]

filename = localdir + paper_title + ".pdf"

filename.replace("\\", "").replace("/","").replace(":", "").replace("*", "").replace("?", "").replace("\"","").replace("","").replace("|","")

response_file = opener.open(download_url)

down_file = open(filename, 'wb')

down_file.write(response_file.read())

down_file.close()

# 构建第一次请求时使用的URL

url = 'http://kns.cnki.net/kns/request/SearchHandler.ashx?action=&NaviCode=*&'

parameter={'ua':'1.11'}

parameter['formDefaultResult']=''

parameter['PageName']='ASP.brief_default_result_aspx'

parameter['DbPrefix']='SCDB'

parameter['DbCatalog']='中国学术文献网络出版总库'

parameter['ConfigFile']='SCDBINDEX.xml'

parameter['db_opt']='CJFQ'

parameter['db_opt']='CJFQ,CJRF,CDFD,CMFD,CPFD,IPFD,CCND,CCJD'

parameter['txt_1_sel']='SU$%=|'

parameter['txt_1_value1']='爬虫'

parameter['txt_1_special1']='%'

parameter['his']='0'

parameter['parentdb']='SCDB'

parameter['__']='Sun Nov 05 2017 20:09:05 GMT+0800 (中国标准时间) HTTP/1.1'

times = time.strftime('%a %b %d %Y %H:%M:%S')+' GMT+0800 (中国标准时间)'

parameter['__']=times

getdata = urllib.urlencode(parameter)

uapools = [

"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0",

"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",

"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0",

"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71",

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11"

]

headers = {'Connection': 'Keep-Alive','Accept': 'text/html,*/*','User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'}

headers['Referer']='http://kns.cnki.net/kns/brief/default_result.aspx'

#headers['User-Agent'] = random.choice(uapools)

req = urllib2.Request(url + getdata, headers=headers)

cookie = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie), urllib2.HTTPHandler)

html = opener.open(req).read()

with open('C:/code/test3/web1.html', 'w') as e:

e.write(html)

# 构建第二次请求时使用的URL

query_string = urllib.urlencode({'pagename': 'ASP.brief_default_result_aspx','dbPrefix':'SCDB', 'dbCatalog': '中国学术文献网络出版总库',

'ConfigFile': 'SCDBINDEX.xml', 'research':'off', 't': int(time.time()), 'keyValue': '爬虫', 'S': '1'})

url2 = 'http://kns.cnki.net/kns/brief/brief.aspx'

req2 = urllib2.Request(url2 + '?' + query_string, headers=headers)

# 返回的是搜索结果列表页,第一页

result2 = opener.open(req2)

#opener.addheaders = [("Referer", req2.get_full_url())]

html2 = result2.read()

with open('C:/code/test3/web2.html', 'w') as e:

e.write(html2)

treedata = etree.HTML(html2)

# 请求详情页之前把引用地址改成列表页

opener.addheaders = [("Referer", req2.get_full_url())]

localdir = "C:/code/test3/pdf/"

download_paper(treedata, opener, localdir)

#获取总页数total_page_count

current_page_node = treedata.xpath('//span[@class="countPageMark"]/text()')

print "current_page_node:", current_page_node

total_page_count = current_page_node[0].split('/')[1]

print "total_page_count:", total_page_count

current_url = result2.url

for page_num in range(2, int(total_page_count)+1):

#获取下一页的链接

print "准备爬取第", str(page_num), "页"

next_page_node = treedata.xpath('//div[@class="TitleLeftCell"]/a[last()]/@href')

next_page_url = next_page_node[0]

next_page_url_full = url2 + next_page_url

opener.addheaders = [("Referer", current_url)]

# 返回的是搜索结果下一页的列表页

next_page_response = opener.open(next_page_url_full)

opener.addheaders = [("Referer", next_page_response.url)]

#file_next_page = open('C:/code/test3/web4' + str(page_num) + '.html', 'w')

html = next_page_response.read()

#file_next_page.write(html)

#file_next_page.close()

#print "current_url:", current_url

#print "next_page_url:", next_page_response.url

# 修改上一页,以供请求下页时引用

#result2 = next_page_response

treedata = etree.HTML(html)

current_url = next_page_response.url

localdir = "C:/code/test3/pdf/"

download_paper(treedata, opener, localdir)

服务器响应超时

验证码输入

image.png

不只一次的在第17页,需要输入验证码

image.png

处理方法:重新更换User-Agent后,直接从第17页开始爬取

20171110日志

image.png

20171109晚上爬取结果,搜索关键字“爬虫”,看起来像是给了假数据,可能知网检测出来了爬虫。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

活性卡桑德拉

或是冒险从Cassandra被动地读取数据。 总览 让我们首先尝试从编程的角度定义什么是反应性。 功能反应式编程是使用功能性编程的构建块进行反应式编程的编程范例。 函数式编程是一种编程范例,是一种构建计算机程序的结构和元素的样式,这种处理将计算视…

UVA1602 Lattice Animals 搜索+剪枝

题目大意 给出一个$w\times h$的网格,定义一个连通块为一个元素个数为$n$的方格的集合$A,\forall x\in A, \exists y\in A$,使得$x,y$有一条公共边。现要求一个元素个数极多的连通块的集合$K_N$,使得$\forall A,B\in K_n$,不存在一…

js 停止事件冒泡 阻止浏览器的默认行为

在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。 浏览器默认行为: 在form中按回车键就会提交表单;单击鼠标右键就会弹出context menu. a标签 1..停止事件冒泡 JavaScrip…

魔域传说显示与服务器断开连接,《魔域传说》合服公告

8月2日合服公告亲爱的勇士,为了给大家提供更加优质的游戏体验,《魔域传说》将于2021年8月2日14:00对部分服务器进行合服维护,维护时长预计3小时,维护完成时间视维护情况可能提前或延后,在维护期间将不能登陆服务器&…

python怎么打开程序管理器_Python 进程管理工具 Supervisor 使用教程

因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新。请访问我的个人网站获取这篇文章的最新内容,Python 进程管理工具 Supervisor 使用教程 Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上&#xff…

Hive的伴奏_OURDEN INSTRUMENTALS MIXTAPE Vol.108 “Sober” 伴奏合辑

OURDEN INSTRUMENTALS MIXTAPE Vol.108Sober曲目列表 Track List :Anne Tello – Love Transformation (Prod. By Peter Monk)Blac Youngsta – Left (Prod. By Yung Lan)Bling X – Missing You (Prod. By Phivestarr Productions)BlocBoy JB – Ali (Prod. By Denaro Love)Bl…

命名空间和程序集

命名空间 命名空间是在逻辑上分割代码,程序集是在物理上分割代码。 嵌套命名空间 namespace one { namespace two { } } 通过one.two引用内部嵌套的命名空间的代码。 命名空间不必和程序集同名。 类的可见性 internal 修饰的类,仅能在本程序集中访问。 p…

WebSocket和Java

WebSocket是一项很酷的新技术,它允许浏览器与服务器之间进行实时双向通信,而几乎没有开销。 我在这里想要做的是,提供一个非常简洁但足够全面的概述,以介绍如何开始使用该技术。 因此,从以下几件事开始: 在…

网页顶部进度条-NProcess.js

背景 有些网站,比如github上在查看项目文件夹层级时会在网页顶部出现一个 进度条,虽然是PC端却有一种移动端体验,个人认为可以提升使用体验,经查阅相关资料后,找到一个NProgress.js全站进度条插件 示例 在使用vue开发S…

点击图片放大至原始图片大小

有些时候为了排版的整洁,页面展示的图片不得不都是限定宽高的,如果想要点击图片放大至原始大小进行预览,再次点击回到原来样子,就要用到下面的代码了: var _w parseInt($(window).width());//获取浏览器的宽度$("…

ft服务器设置传输协议,ft服务器设置成主动模式

ft服务器设置成主动模式 内容精选换一换如果您选择使用SFS Turbo实现文件共享存储,此章节操作可跳过,您可以参见《SAP HANA用户指南》中的“格式化磁盘”章节,挂载Backup卷。NFS Server磁盘需要格式化,并挂载到相应的目录后&#…

c语言将字符串按空格分割_以空格作为分隔符的字符串三角形C语言

这是一个独特的三角形,它与所有其他三角形不同,它以这种方式打印由空格分隔的单词。我在寻找的答案不存在于任何其他问题中,已经检查过了。以空格作为分隔符的字符串三角形C语言输出应该是这样的这这是这是这是最好的这是最好的办法这是最好的…

制作逻辑卷快照

逻辑卷快照的功能是将逻辑卷的数据保存备份、以及快速的数据恢复 查看逻辑卷的详细信息:vgdisplay 对vg01卷组的lv01逻辑卷做一个名称为SNAP而大小为150M的逻辑卷快照: lvcreate -L 150M -s -n SNAP /dev/rhcsa/vo 查看逻辑卷和快照的信息: lvs 在逻辑卷中…

使用JPA标准@ViewScoped通过分页,过滤和排序进行Primefaces DataTable延迟加载

Primefaces数据表惰性分页有效,但是在Web上使用Criteria搜索完整示例后,我感到非常沮丧。 所以我混合了来自 http://stackoverflow.com/questions/13972193/how-to-query-data-for-primefaces-datatable-with-lazy-loading-and-pagination http://www.…

mysql text字段导出_Mysql数据库的各种命令:

一、连接MYSQL格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。 首先打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql -u root -p,回车后提示你输密码. 注意用户名前可以有空格也可以没有空格,…

微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片

以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证。如有bug,还请在评论区留言。 demo链接:https://pan.baidu.com/s/1c35mbjM 密码:5yyf 1.移动端微信浏览器返回刷新…

access数据库为什么一直登陆_为什么要养成用Access数据库保存数据的习惯?

我是宇哥,专门教数据库的,学办公软件的女同学没有不认识我的。一、今天强调一下:为什么要养成用标准数据库保存数据的习惯~其实制造业企业,都更倾向于用Access数据库保存日常数据,尤其是一些高端制造业&…

服务器主板北桥芯片组有哪些,主板芯片组_目前的主板芯片组都有哪些?

目前主流的芯片组有:Intel(英特尔)的、、、。AMD(超微)的、、、。nVidia的、、。芯片组就相当于主板的大脑,主板是什么芯片组决定了主板可以装什么处理器。因为主板芯片分为北桥芯片(离处理器近的)与南桥芯片(离处理器远的),它们一般是成对出…

快速安装puppeteer (跳过安装Chromium)

npm i --save puppeteer --ignore-scripts 设置镜像下载 npm config set PUPPETEER_DOWNLOAD_HOSThttps://npm.taobao.org/mirrors npm install --save puppeteer 转载于:https://www.cnblogs.com/jso0/p/10336205.html

python地板除与除法的区别_“地板除”还是“取整除”?地板除和天花板除floor division和ceil devision...

上一篇文章知识点太多,我需要一一查看理解。 在运算符 ➡ 算数运算符 ➡ 操作符 ➡ // 整除(地板除) 3//4 为什么叫地板除? 向下取整除,就是地板除 floor division 向上取整除,就是天花板除,cei…