python 学术_python requests爬取必应学术

利用爬虫技术爬取文献,可以获取到必应学术上文献的文献名、作者、摘要、期刊等和参考文献和引证文献。虽然直接在必应上搜索,可以直接在在网页上看文献摘要。通过查看文献名、摘要等信息来进一步确定是否要看文献内容,但这有时是一件费力的事,需要每次点击文献,看基本信息来进一步确认是否是自己感兴趣的。然而利用爬虫可以批量下载文献,然后通过进一步筛选,得出自己感兴趣的文章。这能省下许多时间。

实例

通过正常利用浏览器在必应学术上搜索文献,打开必应学术URLA similarity distance of diversity measure for discriminating mesophilic and thermophilic proteins,然后搜索,下面会出现许多条目点开一个看起来像是请求数据的请求。会出现它的详细信息。如下图:

详情

有请求 url ,查询参数,请求头等数据。下面给出代码来实现第一步请求。

1.首先分析分析request url,发现url是由参数构成,其参数有q、go、qs、form.其中q显而易见是查询数据。在url中是以 ‘+’将每一个单词连接的。go是什么行为,qs和form暂未知,照写就行,有如下代码:

g.png

构建请求头,主要是参数 q 变化,其它参数没变。所以构建参数q,先将文献名按空格转化为list,在利用‘+’将他们转化为字符串。

如果将r.text里的内容写入一个html文件里再打开,会发现和浏览器正常打开一样的。

s.png

2.这里需要的是必应学术的网页链接,而不是其它的网站,有时,必应学术的会在第一条,有时在下面几条中,上图是第二条。在浏览器中点击第二条,会进入详细页面,然后就可以通过正则表达式或者一些解析库获如Beautiful Soup来获取数据,这里就不在给出代码了。

这是在搜索页面窗口判断哪条数据是必应学术的,通过简单的if判断(关键词可能出错),必应url应该是这样的

/academic/profile?id=djflajd&encoded=0&v=paper_preview&mkt=zh-cn

其中id=djflajd&encoded=0&v=paper_preview&mkt=zh-cn,在ajax请求中是固定参数,故单独提出来。

for i in range(1,5):

result = html.xpath('//*[@id="b_results"]/li[%s]/h2/a/@href' % i)

if '/academic/' in result[0]:

_, p_id = result[0].split('?') # 获取不变的参数

break

3.接下来分析它的参考文献或引证文献,默认只显示10条,通过点击展示更多可以再显示10条,点击XHR可以筛选出ajax请求,(这里没有继续请求文章详细页面,而是直接构建ajax请求url)

a.png

这里经过几次分析,有几个主要参数在变化,控制加载数据行为,

参数

count 代表一次加载多少数据,默认是10,first是偏移量,代表从第几条数据开始加载。IID,SFX,是加载次数。点击一次展示更多,数字就会增加。rt,为1是代表显示参考文献,等于2是引证文献。

通过直接访问ajax请求url,可以得到以下画面

aj.png

要获取数据也就需要用解析库或者正则表达式解析数据了。代码如下:

l.png

代码有点垃圾,hhh,将就看了。。。。

结果:

r.png

其它

代码中只是简单简单实现参考文献的的爬取,不过要完整的爬取文献的文献名、作者、摘要、期刊等和参考文献和引证文献。却也不难,引证文献只需将参数rt改为2就行。其它的就利用解析库解析就行。另外,可以将参考文献,引证文献保存起来,然后在循环运行函数,让程序一直运行,把所有相关文献都爬出来了,不过这肯定就费时间了还有需要设置代理防止反爬。

python控制台动画

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值