# -*- 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晚上爬取结果,搜索关键字“爬虫”,看起来像是给了假数据,可能知网检测出来了爬虫。

python爬取会议论文pdf_【python2.7】爬取知网论文相关推荐

  1. Ubuntu下使用CAJViewer看知网论文(2020最新方法)

    Ubuntu下使用CAJViewer看知网论文(2020最新方法) 看到网上的教程比较麻烦,而且现在CAJViewer官网已经提供linux支持了,所以分享给大家 使用教程 到 CAJViewer官网 ...

  2. 使用HtmlUnit爬取知网论文

    转载请注明:http://mp.blog.csdn.net/postedit/79131443 首先编写HtmlUtils类,这个类将一些常用方法集成到一个类里面. 工具类 public class ...

  3. Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转

    数据来源:数据挖掘入门与实战  公众号: datadw scrapy_jingdong[9]- 京东爬虫.基于scrapy的京东网站爬虫,保存格式为csv.[9]: https://github.co ...

  4. 下载知网论文PDF版本

    问题 需要下载知网上的硕博论文时,会发现只有CAJ格式,没有PDF格式可供下载,很是不方便,怎么下载PDF格式的论文呢,记得以前是有的呀? 解决办法 本文提供两种解决办法: 使用海外版知网,将论文详情 ...

  5. python开源爬虫项目违法吗_Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据...

    数据挖掘入门与实战 公众号: datadw scrapy_jingdong[9]- 京东爬虫.基于scrapy的京东网站爬虫,保存格式为csv.[9]: https://github.com/taiz ...

  6. 知网论文caj怎么转化成word

    步骤: 1,首先打开百度首页,用"speedpdf"作为关键词进行搜索,找到并进入转换界面. ​2,点击进入"CAJ转WORD"的操作页面后,选择添加文件或者是 ...

  7. 怎么将知网论文caj导出word文件

    CAJ全称China Academic Journals,中国学术期刊全文数据库中文件的一种格式,可以用CAJViewer浏览器来阅读.CAJ有点类似于PDF文件,属于封装文件,对于该文件唯一的缺陷就 ...

  8. 知网论文 caj 转 pdf 方法【带目录且文字可选的pdf,非图片】

    知网 CajViewer 转换的 pdf 为图片格式,没有目录且为图片格式 下载下面的小工具即可,轻松转换,免费 例如,Windows v0.1.4 版本的下载链接为 https://github.c ...

  9. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试

    作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下:   1.爬取内容总为空,其原因 ...

最新文章

  1. ruby Mixin用法
  2. RH系列linux上编译android2.3(gingerbread)
  3. 【c语言】蓝桥杯入门训练 圆的面积
  4. 招募 | 《大数据实践课》企业合作项目,2020年夏季学期“清华大学大数据能力提升项目”...
  5. android 百分号,关于Android资源文件中出现百分号的问题
  6. mxOutlookBarPro中,button是通过for语句动态生成的,如何取得当前单击button的标题呢?...
  7. 嵌入式系统启动流程和启动代码的作用 !
  8. React Native封装Toast与加载Loading组件
  9. antd4中Form.create已废弃
  10. 实力剖析一个经典笔试题
  11. SAP License:选择ERP系统的诀窍
  12. LAMP架构调优(五)——网页缓存设置
  13. Linux实战(9):Docker一键搭建kms服务
  14. 病毒、蠕虫、木马学习笔记
  15. AI机器学习面试常见问题与答案
  16. 四十多岁的男人还适合重新创业吗?
  17. 全国青少年软件编程(Scratch)等级考试一级考试真题2022年12月——持续更新.....
  18. Visual Studio Community2019 30天试用期过期,无法登录微软账户
  19. %f 与 %lf的区别
  20. NEFU 大一寒假训练六(二分查找)题目预测

热门文章

  1. ubuntu 查看日历,日期
  2. 多线程多进程解析:Python、os、sys、Queue、multiprocessing、threading
  3. MFC利用控制台输出调试信息的方法
  4. java的sql的like_[Java教程]SQL like 模糊查询, in
  5. GIS实用小技巧(三)-CASS怎么添加图例?
  6. 人工智能超强面经:文本检测与GAN篇(含答案)
  7. java如何抽象一辆车,java新职篇:面向对象之抽象
  8. 【APICloud系列|20】如何使用使用APICloud开发出优质的Hybrid App
  9. BurpSuite v2021.8.2安装使用
  10. 一句话木马绕过linux安全模式,一句话木马(webshell)是如何执行命令的