xpath以某个字符开始_Python带你看文献—xpath抓取知网文献

本文作者:王碧琪

文字编辑:余术玲

技术总编:张   邯

爬虫俱乐部将于2020年1月5日至11日湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~

另外,2019年11月29日-12月1日在湖北武汉举办的《2019年Python第四期培训招生》,招生工作已经结束,请大家继续关注我们后续的培训公告哦~

在做学术的道路上,陪伴我们的不是对象(可能没有),不是家人(可能不在身边),甚至不是头发(日减稀疏),始终不离不弃的肯定是浩如烟海的论文。查阅文献常用的网站当属知网,为了实现快速翻阅、应用有类似纸质书体验的效果,我们今天就用Python来翻一翻知网上顶级期刊的文献目录。

一、案例简介我们进入中国知网网站,点击出版物检索,选择期刊导航,输入《会计研究》。

22fd7d5e4a88a668ff63f2fa7e69f4df.png

7be7477b144d3deabfb177b75bb8495f.png

就进入了目标网址:https://navi.cnki.net/knavi/JournalDetail?pcode=CJFD&pykm=KJYJ。我们的目标是爬取2018年全年的文章题目和作者,对于没有作者的文章题目,如征文启事,则予以删除。我们先对单期期刊进行处理,再将其扩展到12期期刊。

f441db92d92b5515724c7d0794d58510.png

二、案例实操

(一)单个期刊

我们打开开发者模式,选择network,在name中寻找到网页信息,发现其网页获取方式是post,接着我们模拟人工浏览网页的行为写入headers对应的信息:url,request headers和querystring parameters。

cf75de45497d810d2ccc8af3c3e5029e.png

34cbf33d3cc1022819e55985b7989814.png

5f400d5fb0c0dad7ec11185e7ca667cf.png

import requests  #引入requests库爬取网页代码import json  #引入json库处理data列表中的内容url='https://navi.cnki.net/knavi/JournalDetail/GetArticleList?year=2018&issue=01&pykm=KJYJ&pageIdx=0&pcode=CJFD'    headers={         'Accept': '*/*',         'Accept-Encoding':'gzip, deflate, br',         'Accept-Language':'zh-CN,zh;q=0.9',         'Connection':'keep-alive',         'Content-Length':'0',         'Cookie':'Ecp_notFirstLogin=lGQkVH; Ecp_ClientId=7190918101000734970;cnkiUserKey=bb2d2b7c-5a96-65a9-7fa0-e25390f23ca9;LID=WEEvREcwSlJHSldRa1FhdXNXaEhobnVrZ0FnZVZzejRNWVFKcmlhZlNXRT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!;ASP.NET_SessionId=jnov5mpsxebarzz3enczg3gj; SID_navi=120161;c_m_LinID=LinID=WEEvREcwSlJHSldRa1FhdXNXaEhobnVrZ0FnZVZzejRNWVFKcmlhZlNXRT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!&ot=10/22/201919:34:18; c_m_expire=2019-10-22 19:34:18; Ecp_session=1; Ecp_LoginStuts=%7B%22IsAutoLogin%22%3Afalse%2C%22UserName%22%3A%22WH0023%22%2C%22ShowName%22%3A%22%25E4%25B8%25AD%25E5%258D%2597%25E8%25B4%25A2%25E7%25BB%258F%25E6%2594%25BF%25E6%25B3%2595%25E5%25A4%25A7%25E5%25AD%25A6%22%2C%22UserType%22%3A%22bk%22%2C%22r%22%3A%22lGQkVH%22%7D;Ecp_notFirstLogin=lGQkVH;LID=WEEvREcwSlJHSldRa1FhdXNXaEhobnVrZ0FnZVZzejRNWVFKcmlhZlNXRT0%3D%249A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!;NaviIsLogin=1; _pk_ses=*',         'Host':'navi.cnki.net',         'Origin':'https://navi.cnki.net',         'Referer':'https://navi.cnki.net/knavi/JournalDetail?pcode=CJFD&pykm=KJYJ',         'Sec-Fetch-Mode':'cors',         'Sec-Fetch-Site':'same-origin',         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/75.0.3770.100 Safari/537.36',         'X-Requested-With':'XMLHttpRequest'    }data={         'year': '2018',         'issue': '01',         'pykm': 'KJYJ',         'pageIdx': '0',         'pcode': 'CJFD'    }html=requests.post(url,headers=headers,data=json.dumps(data))

结果为:

说明网页爬取成功。至此我们就把2018年第一期期刊的网页源代码拿到了,接下来,使用xpath解析,得到目标信息。

from lxml import etree  #引入lxml库totitlename=[]  #首先定义空列表以盛放结果信息toauthor=[] tree=etree.HTML(html.text) #使用xpath进行解析titlename=tree.xpath("/html/body//span[@class='name']/a/text()")#得到这一节点对应的文本内容即为文章题目author=tree.xpath("/html/body//span[@class='author']/text()")#得到这一节点对应的文本内容即为作者totitlename.extend(titlename[0:len(author)]) #没有作者的文章题目,如征文启事,不保留toauthor.extend(author)print(totitlename)print(toauthor)
结果为:

90dfb0379be947d6f556197be4380a40.png

至此我们成功得到了2018年第一期期刊所有的文章题目和作者。

(二)12期期刊

接下来,对于12期期刊,我们将用于单个期刊的程序封装进一个循环。其中关于f-string的用法参见往期推文《格式化字符串方法的比较》。
import requestsfrom lxml import etreeimport jsonimport retotitlename=[]toauthor=[]for issue in range(1,13):    url=f'https://navi.cnki.net/knavi/JournalDetail/GetArticleList?year=2018&issue={issue:0>2d}&pykm=KJYJ&pageIdx=0&pcode=CJFD'     #使用f-string实现{}内依次为两位数字01-12    headers={              'Accept':'*/*',              'Accept-Encoding':'gzip, deflate, br',              'Accept-Language':'zh-CN,zh;q=0.9',              'Connection':'keep-alive',              'Content-Length':'0',              'Cookie':'Ecp_notFirstLogin=lGQkVH; Ecp_ClientId=7190918101000734970;cnkiUserKey=bb2d2b7c-5a96-65a9-7fa0-e25390f23ca9;LID=WEEvREcwSlJHSldRa1FhdXNXaEhobnVrZ0FnZVZzejRNWVFKcmlhZlNXRT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!;ASP.NET_SessionId=jnov5mpsxebarzz3enczg3gj; SID_navi=120161;c_m_LinID=LinID=WEEvREcwSlJHSldRa1FhdXNXaEhobnVrZ0FnZVZzejRNWVFKcmlhZlNXRT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!&ot=10/22/201919:34:18; c_m_expire=2019-10-22 19:34:18; Ecp_session=1;Ecp_LoginStuts=%7B%22IsAutoLogin%22%3Afalse%2C%22UserName%22%3A%22WH0023%22%2C%22ShowName%22%3A%22%25E4%25B8%25AD%25E5%258D%2597%25E8%25B4%25A2%25E7%25BB%258F%25E6%2594%25BF%25E6%25B3%2595%25E5%25A4%25A7%25E5%25AD%25A6%22%2C%22UserType%22%3A%22bk%22%2C%22r%22%3A%22lGQkVH%22%7D;Ecp_notFirstLogin=lGQkVH;LID=WEEvREcwSlJHSldRa1FhdXNXaEhobnVrZ0FnZVZzejRNWVFKcmlhZlNXRT0%3D%249A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!;NaviIsLogin=1; _pk_ses=*',              'Host':'navi.cnki.net',              'Origin':'https://navi.cnki.net',              'Referer': 'https://navi.cnki.net/knavi/JournalDetail?pcode=CJFD&pykm=KJYJ',              'Sec-Fetch-Mode':'cors',              'Sec-Fetch-Site':'same-origin',              'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/75.0.3770.100 Safari/537.36',              'X-Requested-With':'XMLHttpRequest'    }    data={              'year':'2018',              'issue':f'{issue:0>2d}',              'pykm':'KJYJ',              'pageIdx':'0',              'pcode':'CJFD'    }    html=requests.post(url,headers=headers,data=json.dumps(data))    tree=etree.HTML(html.text)    titlename=tree.xpath("/html/body//span[@class='name']/a/text()")    author=tree.xpath("/html/body//span[@class='author']/text()")    totitlename.extend(titlename[0:len(author)])#没有作者的文章题目,如征文启事,不保留    toauthor.extend(author)print(len(totitlename))print(len(toauthor))
结果为:367fc00aaaa1bc6ed8705a0c87c0e8a2.png

说明我们一共抓取到了157条信息。接下来我们将结果写入文件,保存下来。其中关于re.sub的使用参见往期推文《妙用正则表达式--Python中的re模块》。

with open('g:\\会计研究.csv','w',encoding='gb18030') as f:    for i in range(0,len(toauthor)):        f.write(totitlename[i].strip()+','+re.sub(";",",",toauthor[i])+'\n')  #strip函数把文章题目中的空白字符删掉,re.sub把作者中的分号替换为逗号。写入文章题目+作者姓名
结果如下:

1e78c51dd30e95f1ca1e3019c756c7cb.png

现在我们就成功使用Python得到了《会计研究》2018年12期期刊的文章题目和对应作者,达到了迅速浏览目录的效果。

三、小结学术的路上,道阻且长,希望小编的这段程序可以帮助大家在学术道路上走得稍微容易一点,望大家多读文献、多发文献,把学术做得更好!

965e0baa8f97710ef0175a4e2a553244.gif

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!往期推文推荐

       您有一份天气预报待签收 

听说会Stata的人,数学不会太差?批量修改路径妙用正则表达式--Python中的re模块豆瓣电影评分之数据爬取与可视化的实现 

为了辅导作业,这位家长竟然...

       走进列表的世界——列表方法(二)走进列表的世界——列表方法(一)朝花夕拾|长宽数据转换——reshape命令

Stata有音乐包啦!

对《陈情令》的数据可视化分析

stata绘制热力图详解

实战演练-明星微博热搜次数的数据可视化

《少年的你》影评

集合常用方法小结

实战演练-爬取深交所年报

重建“通天塔” —— Unicode编码与解码

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。04c3939b608a980b0e8641c66468077b.png
R语言抓取实战:rvest工业级爬虫工作流设计 抓取(Web Scraping)是数据工程师获取非结构化络数据的基础能力,其核心在于HTML解析、选择器定位与请求会话管理。rvest作为R语言生态中专精于HTML/XML解析的轻量级工具,依托httr和xml2构建分层架构,以语义化CSS选择器、自动编码识别、空值安全返回等特性,显著提升解析鲁棒性与tidyverse兼容性。相比Python全栈框架,rvest聚焦‘解析层’,不介入JS渲染或任务调度,因而具备高稳定性与低维护成本,特别适合电商价格监控、学术文献采集、竞品数据追踪等需长期运行的生产场景 阅读详情

相关推荐

Python+Selenium自动化爬取Google Scholar文献并批量导入Zotero

在学术研究和文献管理工作中,自动化技术正成为提升效率的关键。通过Python编程结合Selenium库,可以实现对Google Scholar等学术站的自动化访问与数据采集,其核心原理是模拟真实用户操作浏览器,绕过反爬机制,稳定获取文献信息。这项技术的价值在于将研究者从繁琐、重复的手动下载与整理工作中解放出来,实现文献收集的批量化与流程化。典型的应用场景包括研究生开题调研、学者追踪领域前沿以及项目背景资料库建设。本文聚焦于利用Selenium进行页自动化操作,并详细阐述了如何将采集到的文献元数据与PDF

weixin_34095889的博客 350

关键词搜索爬取摘要信息

关键词搜索爬取摘要信息 由于技术不成熟,代码冗余度较高。同时代码也可能会存在错误,也请各路高人指正。 本篇文章应用范围为期刊搜索(不包括外文文献),其他内容,没有进行测试!!! 本次爬虫所采用到的技术: selenium自动化 正则表达式匹配文本字符xpath查询标签位置 pandas导出excel requests发起请求 第一部分,获取详情页内容链接,并存入本地文件。 第一步,分析搜索页。本次我们以两个关键词为例(‘农地流转’,风险),通过selenium模拟浏览器动作进行列表

weixin_46266590的博客 4941

Python学术文献采集实战:CNKI与Google Scholar题录及参考文献批量导出方案

总的来说,CNKI结构化程度高、采集门槛低,适合中文文献批量整理;Google Scholar引用数据完整、官方导出规范,适合外文调研和引用分析。小批量需求直接用平台自的导出功能即可,量大、需要定制化处理时,再考虑自动化采集。技术只是提升效率的工具,核心还是为学术研究服务。合规提示:请严格遵守《络安全法》《著作权法》及目标平台的服务条款,仅在合法授权范围内开展数据采集活动。采集到的文献数据仅限个人学术研究使用,不得用于商业传播或非法用途,尊重识产权与平台运营规则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 339

链表反转

输入一个链表,反转链表后,输出新链表的表头。 #include <iostream> #include <cstdlib> using namespace std; struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; class Solution{ public: ListNode *ReverseList(ListNode*

Alan的博客 208

Python你看文献xpath抓取文献!

在做学术的道路上,陪伴我们的不是对象(可能没有),不是家人(可能不在身边),甚至不是头发(日减稀疏),始终不离不弃的肯定是浩如烟海的论文。查阅文献常用的站当属,为了实现快速翻阅、应用有类似纸质书体验的效果,我们今天就用Python来翻一翻上顶级期刊的文献目录。 一、案例简介 我们进入中国站,点击出版物检索,选择期刊导航,输入《会计研究》。 就进入了目标址:ht...

PythonJavaPHP的博客 3659

python爬虫为什么xpath路径正确却检索不到内容_中国爬虫

一、介绍提起中国,如果你曾经写过论文,那么基本上都会与中国打交道,因为写一篇论文必然面临着各种查重,当然翟博士除外。但是,本次重点不在于写论文跟查重上,而在于我们要爬取上一些论文的数据,什么样的数据呢?我们举一个例子来说,在上,搜索论文的方式有很多种,但是对于专业人士来说,一般都会使用高级检索,因为直接去查找作者的话,容易查找到很多重名作者,所以我们本次的爬虫也是使用...

weixin_39796152的博客 5348

爬虫的两种解析方式 xpath和bs4

1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文件名)  ===》保存的本地文件路径放入 (2)络文件 tree = etree.HTML(字符串) ==》直接把...

ZHOUXIN0426的博客 643

Python+Selenium自动化抓取谷歌学术Bibtex引用,解放科研生产力

在学术研究和论文写作中,文献管理与引用格式的准确性至关重要。Bibtex作为一种通用的文献引用格式标准,能够确保引用信息的规范与统一。通过Python编程语言结合Selenium自动化测试框架,可以实现对动态页内容的精准抓取与交互模拟。这项技术能够将研究人员从繁琐的手动复制粘贴工作中解放出来,显著提升文献收集与整理的效率。其核心价值在于通过模拟真人操作浏览器,稳定获取谷歌学术等平台上的Bibtex引用代码,尤其适用于需要处理大量文献的综述撰写、课题研究等场景。本方案详细介绍了如何利用Python Sele

weixin_33722405的博客 379

python 爬取豆瓣某一主题书单_Python爬虫 || 使用requests和xpath爬取豆瓣Top250书单内容全解。...

昨天,我们了解了如何爬取豆瓣某一个电影固定的位置信息,包含电影名称、导演、演员及评分等,今天我们来了解一下如何爬取豆瓣Top250书单,并如何将爬取到的内容存放到本地。废话不多说了,shou my code!# 爬取豆瓣TOP150import requests # 导入相关的包from lxml import etreeimport timeimport xlwt # 导入此包,可以将抓取的内容...

weixin_36046776的博客 600

爬虫的步骤解析内容xpath介绍_爬虫的两种解析方式 xpath和bs4

1.xpath解析from lxml import etree两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点(1)本地文件tree = etree.parse(文件名)  ===》保存的本地文件路径放入(2)络文件tree = etree.HTML(字符串) ==》直接把得到的字符串作为参数传入ret = tree.xpath(路径表达式)【注】ret是一...

weixin_28870939的博客 225

XPath高级语法实战:从轴语法到复杂DOM定位

XPath作为XML和HTML文档的查询语言,在Web数据抓取和文档处理中发挥着关键作用。其核心原理是通过路径表达式定位节点,其中轴语法提供了多维度的节点关系导航能力,包括子节点、父节点、兄弟节点等13种遍历方向。在工程实践中,XPath的高级特性能够有效解决动态ID、不规则嵌套等复杂DOM定位问题,相比基础CSS选择器具有更强的表达能力。特别是在电商价格监控、政府站数据提取等场景中,通过ancestor、following-sibling等轴语法组合,配合contains、starts-with等函数过

weixin_30457551的博客 381

python位置_python定位位置

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!向浏览器输入urldriver.find_element_by_id(kw).send_keys(python) 定位百度输入框,并输入pythondriver.find_element_by_id(su).click() 定位【百度一下】按钮,发送单击事件#driver.find_...

weixin_39576336的博客 931

爬虫

主要是联系了urlib库的使用,通过parse进行解析数据。 实名感谢opensourceChina # -*- coding: UTF-8 -*- __author__ = 'zy' __time__ = '2019/3/1 21:05' #//*[@id="ctl00"]/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]/a/text() fro...

何加焉的博客 6302

论文爬虫_Springer_Xpath方法

手动输入关键词和页码范围,获取论文信息,并保存到同一列表标题,链接,期刊,发表时间,论文类型,下载链接 本人有意做一个完整的、系统的论文爬虫项目,欢迎有兴趣的大佬一起讨论合作。

sme2457的博客 827

selenium+xpath爬取空间

selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本 一、

weixin_42869502的博客 510

使用XPath的爬虫

爬取某贴吧 import requests from lxml import etree import json class Tieba(object): def __init__(self,tieba_name): self.tieba_name=tieba_name self.headers={ &quot;User-Agent&quot;: &quot;Mo...

cflcgw的博客 365

xpath爬取页面内容保存成文档_爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容...

爬取说明以单个页面为例,如:http://blog.jobbole.com/110287/我们可以提取标题、日期、多少个评论、正文内容等Xpath介绍1. xpath简介(1) xpath使用路径表达式在xml和html中进行导航(2) xpath包含标准函数库(3) xpath是一个w3c标准2. Xpath的节点关系(1) 父节点(2) 子节点(3) 同胞节点(4) 先辈节点(5) 后代节点3...

weixin_32219363的博客 321
上一篇: accept 返回0_集合[0]
下一篇: dubbo k8s 服务发现_k8s部署 prometheus+consul 自动服务发现监控1
亦梦如是
博客等级 码龄9年 39粉丝 77原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值