本文仅作个人学习使用,请勿滥用网络资源
作为一名学术劳工,每天免不得要去寻找需要的文献来看,而通常都是在某几个特定的期刊上浏览,为了方便学习,也为了保持敲代码的手感,这次就来爬取一下SceienceDirect旗下期刊的最新内容。由于所有的期刊的网页结构一样,所以就将整个爬取过程抽象出来,这样就可以爬取所有期刊了,以备后续深入学习。
整个代码其实很简单,以earth-science-reviews这个期刊为例
可以看到我需要的内容在红色圈中,就可以先获取到该链接,然后进入
这里,我需要最新期目的期目号和发行时间,以及每篇文章的题目和链接。
这里我新建了一个ScienceDirect类,可用过新建实例,并输入期刊,如’earth-science-reviews’,这个一定要注意格式,懒得做一个格式转换了。(因为我比较熟悉期刊~~)
import requests
from bs4 import BeautifulSoup
class ScienceDirect:
def __init__(self, journal):
self.subject = journal
self.base_url = 'https://www.sciencedirect.com'
def latest_issue(self):
content = ''
url = self.base_url + '/journal/' + self.subject
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36'}
re = requests.get(url, headers=headers)
soup = BeautifulSoup(re.text, 'html.parser')
real_url = self.base_url + soup.find_all('div', class_='u-margin-s-top issue')[2].find('a')['href']
real_re = requests.get(real_url, headers=headers)
real_soup = BeautifulSoup(real_re.text, 'html.parser')
articles = real_soup.find_all('li', class_='js-article-list-item article-item u-padding-xs-top u-margin-l-bottom')
volume = real_soup.find('h2', class_='u-text-light u-h1 js-vol-issue').text
dates = real_soup.find('h3', class_='js-issue-status text-s').text
subject = '{} {} {}'.format(self.subject, volume, dates)
for article in articles:
title = article.find('span', class_='js-article-title').text
link = self.base_url + article.find('a', class_='anchor article-content-title u-margin-xs-top u-margin-s-bottom')['href']
content += '{}\n{}\n'.format(title, link)
return subject, content
if __name__ == '__main__':
s, c = ScienceDirect('earth-science-reviews').latest_issue()
print(s)
print(c)