论文爬虫_Springer_Xpath方法

Xpath爬虫获取Springer论文信息


前言

手动输入关键词页码范围,获取论文信息,并保存到同一列表
标题,链接,期刊,发表时间,论文类型,下载链接


一、CODE

主页面

search_url = "https://www.springeropen.com/search?"

完整代码

"获取主页下面翻页链接,进行逐页爬虫"
import pandas as pd
from lxml import etree
import requests

# 拼接后的链接样式
# url = 'https://www.springeropen.com/search?query=maritime+edge+computing&searchType=publisherSearch'
# url = 'https://www.springeropen.com/search?searchType=publisherSearch&sort=Relevance&query=maritime+edge+computing&page=1'
# 指向同一页面


# 定义不同页面对应参数的函数
def get_params(num, keywords):
    # url = 'https://www.springeropen.com/search?searchType=publisherSearch&sort=Relevance&query=maritime+edge+computing&page=1'
    data = {
        'searchType': 'publisherSearch',
        'sort': 'Relevance',
        'query': keywords,
        'page': num
    }
    return data


# 接收页面参数,获取页面信息
def get_data(data):
    search_url = "https://www.springeropen.com/search?"
    try:
        # 请求获取页面信息,包含链接、头文件和pages返回的参数信息
        # data=data 和 params=data 不一样,post使用data,get使用params
        resp = requests.get(search_url, headers=headers, params=data)
        # 返回请求回应状态码
        resp.raise_for_status()
        # 设置返回内容编码为网页编码格式
        resp.encoding = resp.apparent_encoding
        tree = etree.HTML(resp.text)  # 将文档生成一棵树
        # 之后就可以通过生成的文档树 tree 来查找节点
        # 获取所有li标签的数据
        list_data = tree.xpath('//*[@id="main-content"]/div/main/div/ol/li')
        return list_data
    except Exception as e:
        print("爬取失败", e)


# 数据提取函数
def get_info(li_list):
    cnt = 1
    # 循环读取li标签
    for li in li_list:
        # 获取论文标题,[0]从text()的列表中取出str格式标题
        title = li.xpath('./article/h3/a/text()')[0]
        # 获取论文标题链接
        title_link = li.xpath('./article/h3/a/@href')[0]
        # 'https://educationaltechnologyjournal.springeropen.com/articles/10.1186/s41239-021-00255-0'
        # 将标题链接补全
        full_text_link = 'https:' + str(title_link)
        # 获取期刊名
        journal_title = li.xpath('./article/div[2]/em/text()')[0]
        # 文章类型
        article_type = li.xpath('./article/div[3]/span[1]/text()[1]')[0]
        # 论文在期刊发表时间,normalize-space()去除空格、换行字符
        published_on = li.xpath('normalize-space(./article/div[3]/span[2]/text())') + \
                       li.xpath('normalize-space(./article/div[3]/span[2]/span/text())')
        # 获取PDF链接
        pdf_link = li.xpath('./article/ul/li[2]/a/@href')[0]
        # 'https://educationaltechnologyjournal.springeropen.com/counter/pdf/10.1186/s41239-021-00255-0'
        # 拼接完整的下载链接
        download_pdf_link = 'https:' + str(pdf_link)
        # 提示title的文档信息获取完成
        print(cnt, title, 'done!!!')
        cnt += 1
        # 将文档信息添加到article_info列表
        all_info.append([title, published_on, journal_title, article_type, full_text_link, download_pdf_link])


# 保存数据
def save_data(all_info):
    # 调用pages函数,获取参数值,并设为保存文件的名称,pages(1).values()取value值,[0]取第一个值
    # filename = list(pages(1).values())[0]

    # 将article_info列表转换为DataFrame格式,并设置列命
    df = pd.DataFrame(all_info, columns=['title', 'published_on', 'journal_title',
                                             'article_type', 'full_text_link', 'download_pdf_link'])
    # 将DataFrame保存为csv,并设置编码格式
    df.to_csv(f'{keywords}.csv', encoding='utf-8')


# 主函数
if __name__ == '__main__':

    search_url = "https://www.springeropen.com/search?"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                      "(KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
    }
    # 输入想要查询的内容
    print('please enter the keywords you want to query')
    keywords = input('keywords:')
    print('please enter the pages range you want to query')
    start_page = int(input('start_page:'))
    end_page = int(input('end_page:')) + 1

    # 获取页面函数返回的li标签数据
    # page_link_list = get_page_link(keywords)
    all_info = []
    for i in range(start_page, end_page):
        print(f'第{i}页开始...')
        params_data = get_params(i, keywords)
        li_list = get_data(params_data)
        info_list = get_info(li_list)
        print(f'第{i}页结束。')

    save_data(all_info)
    print('爬取信息完成!!!')

二、TODO

循环访问全文链接,获取文章摘要并保存


总结

简单爬虫,小记一下,供大家交流,欢迎大佬指教。

本人有意做一个完整的、系统的论文爬虫项目,欢迎有兴趣的大佬一起讨论合作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Springer 是一个知名的学术出版机构,接受使用 LaTeX 进行投稿。LaTeX 是一种专业的排版系统,常用于编写科学、技术和数学领域的论文。将论文提交给 Springer方法如下: 首先,你需要根据 Springer 提供的要求和模板格式撰写论文Springer 的官方网站上通常会提供相关的模板和作者指南,你可以根据这些指南来撰写和格式化论文,以确保论文满足 Springer 的格式要求。 其次,创建一个 Springer 的投稿账户。在 Springer 的官方网站上,你可以找到注册表格,并根据指南填写相关信息。注册后,你将获得一个账户,在这个账户下可以提交论文和进行后续的编辑和审稿工作。 然后,登录投稿账户,选择适当的期刊或会议进行投稿。Springer 发行多个学术期刊和举办各种学术会议,你可以根据你的研究领域选择最相关的期刊或会议进行投稿。在提交论文之前,请确保仔细阅读每个期刊或会议的投稿指南,并按照它们的要求进行格式和结构调整。 在提交论文时,你需要上传 LaTeX 文件以及相关的图表和其他支撑材料。Springer 的投稿系统通常会要求你在 LaTeX 文件中插入特定的命令来标记文章的各个部分和标题,以便于编辑和审稿人进行检查和评估。 最后,等待评审过程。一旦提交成功,Springer 的编辑团队将安排专家进行匿名评审。评审结果将在一定时间内反馈给你,可能包括接受、修改或拒绝的意见。如果论文被接受或需要修改,请根据编辑和审稿人的建议进行修订,并在规定的时间内重新提交。 总之,Springer 接受使用 LaTeX 进行投稿。通过遵循 Springer 的指南和投稿流程,你可以向 Springer 提交你的 LaTex 论文,并期待通过匿名评审的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值