Python爬虫--批量获取IEEE文献

Python爬虫--批量获取IEEE文献,第1张

本文代码用于批量获取ieee文献的标题、doi以及摘要,并将获取内容存储在一个名为ieee_paper的txt文件中。


1.打开要爬取的url

打开ieee官网IEEE Xplore,输入想要搜索的关键字(如Beampattern Synthesis),之后会出现满足条件的几页文献,其中第一页文献的url为:IEEE Xplore Search Results

最后一个字符为页数。


 2.获取标题和doi

包含文献内容的请求为search

响应内容为一组json数据,在JSON在线解析及格式化验证 - JSON.cn 中解析。


解析之后,键"records"的值为一个列表,列表中存放的是第一页所有的文献,其中每篇文献对应一个字典。


从字典中可以获取文献的标题和doi。


这部分代码:

for paper in paper_list:
    articleTitle = paper['articleTitle']
    fp.write(articleTitle+'\n')  #存储到文件中
    if 'doi' in paper:
        doi = paper['doi']
        fp.write('doi:'+doi+'\n')

 3.获取摘要

可以在上一步的位置中获取摘要,但是摘要并不完整,所以要爬取每篇文献的详情页以获取完整摘要。


每篇文献的详情页链接就是ieee官网链接,再加上上一步字典中键"documentLink"所对应的值。


 打开文献详情页,找到返回文献摘要的请求。


 返回的是html文件,摘要为meta标签中content属性的内容。



可使用xpath解析库,根据property属性定位该meta标签,获取属性content中的内容即摘要。


    paper_abstract = tree.xpath('//head/meta[@property="twitter:description"]/@content')

4.爬取第一页文献所需的请求头和参数

请求头:

 参数:

#请求头,冒充浏览器
headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '150',
    'Content-Type': 'application/json',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36',
    'Referer': 'https://ieeexplore.ieee.org/search/searchresult.jsp?newsearch=true&queryText=Beampattern%20Synthesis&highlight=true&returnFacets=ALL&returnType=SEARCH&matchPubs=true&pageNumber=1'
}
url = 'https://ieeexplore.ieee.org/rest/search' #输入关键字并搜索后的url
#发送请求携带的参数
data={
    "newsearch": 'true',
    "queryText": "Beampattern Synthesis",
    "highlight": 'true',
    "returnFacets": [
        "ALL"
    ],
    "returnType": "SEARCH",
    "matchPubs": 'true',
    "pageNumber": "1"
}

5.爬取文献详情页

获取摘要的请求为get类型,不需要携带参数。


只需要Headers选项卡最下面的User-Agent,用以冒充浏览器 *** 作。


6.只获取第一页文献信息的完整代码

import requests
import json
from lxml import etree
#请求头,冒充浏览器
headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '150',
    'Content-Type': 'application/json',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36',
    'Referer': 'https://ieeexplore.ieee.org/search/searchresult.jsp?newsearch=true&queryText=Beampattern%20Synthesis&highlight=true&returnFacets=ALL&returnType=SEARCH&matchPubs=true&pageNumber=1'
}
url = 'https://ieeexplore.ieee.org/rest/search' #输入关键字并搜索后的url
#发送请求携带的参数
data={
    "newsearch": 'true',
    "queryText": "Beampattern Synthesis",
    "highlight": 'true',
    "returnFacets": [
        "ALL"
    ],
    "returnType": "SEARCH",
    "matchPubs": 'true',
    "pageNumber": "1"
}

resp = requests.post(url=url,data=json.dumps(data),headers=headers)
resp_text = resp.text
r = json.loads(resp_text)
#将所有文章放在一个列表中
paper_list = r['records'] #每篇文章是一个字典

headers_detail = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
}
fp = open('./ieee_paper1.txt','w',encoding='utf-8') #打开要保存信息的txt文件

#遍历文献列表,获取每个文献的信息
for paper in paper_list:
    articleTitle = paper['articleTitle']
    fp.write(articleTitle+'\n')  #存储到文件中
    if 'doi' in paper:
        doi = paper['doi']
        fp.write('doi:'+doi+'\n')
    #访问每篇论文的详情页,爬取完整摘要
    paper_url = 'https://ieeexplore.ieee.org'+paper['documentLink']
    resp_paper = requests.get(url=paper_url,headers=headers_detail).text
    tree = etree.HTML(resp_paper)
    paper_abstract = tree.xpath('//head/meta[@property="twitter:description"]/@content')
    fp.write('Abstract:\n'+paper_abstract[0]+'\n')
    fp.write('\n==========================分割线=========================\n\n')

print('文献爬取结束!')

爬取完毕后,信息被保存在ieee_paper1.txt文件中:

7.获取多页文献

 将上述代码外面写一个for循环,将代码url和data中的页数1换为i即可爬取多页。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/577869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存