输入关键字 抓取所有网页(如何利用python及免费资源进行基于论文关键词的研究趋势分析)

优采云 发布时间: 2021-10-23 10:17

  输入关键字 抓取所有网页(如何利用python及免费资源进行基于论文关键词的研究趋势分析)

  在学术研究中,往往需要了解某个领域的最新发展趋势,比如发现最热门、上升最快的关键词。一些学术服务网站,比如Web of Science,也提供了类似的服务,但是一些高校并没有订阅这些服务,在使用中难免会遇到各种问题,比如定制不够。在这个文章中,我们将在论文关键词的基础上讨论如何使用python和免费资源进行研究趋势分析。

  入选期刊

  想知道近些年在国际商务领域发表的文章,在google中搜索“google学术期刊排名国际商务”,点击第一个链接,得到如下页面:

  

  以排名第一的Journal of International Business Studies为例,展示如何抓取近年发表的所有文章信息。

  查找文章的列表

  经过一番搜索,我找到了自 2013 年以来发表的所有 442 篇文章 文章 的列表:

  

  点击图中红框内的按钮,将442条文章信息全部导出为CSV文件。

  

  但是,文件中只收录了每个文章的项目标题、作者和URL,并没有关键词(关键词)和摘要(摘要)等重要信息。

  接下来我们用python写一个循环,打开每篇文章的链接文章,抓取关键词和总结。

  抓取网页元素

  首先,我们定义了一个get_keywords_abstract()函数来抓取给定网页中的相关元素,代码如下:

  import requests

from scrapy import Selector

def get_keywords_abstract(url):

r = requests.get(url) #打开网页

if r.status_code != 200: #如果网页连接错误,就返回空字符串

print("Connection error: {}".format(url))

return "", ""

selector = Selector(text=r.text)

keywords = selector.css('.Keyword::text').extract()

abstract = selector.css('#Abs1 p::text').extract_first()

return keywords, abstract

  值得注意的是,我使用了scrapy库中的Selector类来解析网页。这样做的原因是,相对于 Beautiful Soup 和 Pyquery 等库,我更熟悉scrapy下css选择器的使用。

  为了验证以上代码是否正确,我在命令行执行如下测试代码:

  test_url = 'https://link.springer.com/article/10.1057%2Fs41267-019-00235-7'

keywords, abstract = get_keywords_abstract(test_url)

print(keywords)

print(abstract)

  结果有点出人意料:

  >>> print(keywords)

['entry mode\xa0', 'deviation from prediction\xa0', 'internalization theory\xa0', 'bounded rationality\xa0', 'cognitive bias\xa0']

>>> print(abstract)

'We explore when and why decision makers choose international entry modes (e.g., hierarchies or markets) that deviate from internalization theory’s predictions. By applying a cognitive perspective on entry mode decision making, we propose that the performance of prior international activities influences decision makers’ behavior in different ways than assumed in internalization theory. More specifically, due to a'

  关键词 末尾有多余的字符。这不是什么大问题。您可以在后续处理中批量删除它们。真正的问题是摘要不完整。

  在浏览器中打开测试网页,右键查看源码,在摘要中找到一些html标签,如:

  ...due to a representativeness bias , underperforming ...

  正是这些 html 标签干扰了正常的文本抓取。

  为了解决这个问题,我修改了get_keywords_abstract()函数:

  import requests

from scrapy import Selector

def get_keywords_abstract(url):

r = requests.get(url) #打开网页

if r.status_code != 200: #如果网页连接错误,就返回空字符串

print("Connection error: {}".format(url))

return "", ""

selector = Selector(text=r.text)

keywords = selector.css('.Keyword::text').extract()

abstracts = selector.css('#Abs1 p::text').extract() #把extract_first()改成extract(),抓取所有的文本片段

abstract = ''.join(abstracts) #把文本片段连接起来

return keywords, abstract

  重新运行测试代码,发现问题解决了。

  导入 CSV 文件

  下一步是导入CSV文件中的URL列表,循环抓取关键词和summary。

  导入 CSV 文件以使用 pandas 库:

  import pandas as pd

articles = pd.read_csv('../data/jibs_articles.csv', sep=',')

type(articles) #

articles.shape # (442, 10)

articles.columns # 列名

articles.head() # 打印前5行

  For 循环

  确认一切无误后,循环开始:

  urls = articles['URL']

keywords = pd.Series(index=articles.index)

abstract = pd.Series(index=articles.index)

for i, url in enumerate(urls):

keywords[i], abstract[i] = get_keywords_abstract(url)

print("Finish article: {}".format(i)) # 抓完一个网页就报一个数字,等的时候心里好过一些

  等了大约20分钟后,我终于完成了捕获。只有一个 文章 打开错误。

  保存到 CSV 文件

  接下来,我们将关键词和summary整合到数据表中,然后保存到CSV文件中。

  articles['keywords'] = keywords

articles['abstract'] = abstract

articles.columns # 数据表中增加了keywords和abstract两列

articles.to_csv('../data/jibs_keywords_abstract.csv', sep=',', header=True)

  为了方便下次使用,我们“粘贴”一下数据:

  import pickle

with open("../data/articles.pickle", "wb") as f:

pickle.dump(articles, f)

  下一次,我们将讨论基于关键词的研究趋势分析。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线