一文搞定ScienceDirect旗下所有期刊最新期目内容的爬取——仅个人学习使用,切勿滥用

本文仅作个人学习使用,请勿滥用网络资源
作为一名学术劳工,每天免不得要去寻找需要的文献来看,而通常都是在某几个特定的期刊上浏览,为了方便学习,也为了保持敲代码的手感,这次就来爬取一下SceienceDirect旗下期刊的最新内容。由于所有的期刊的网页结构一样,所以就将整个爬取过程抽象出来,这样就可以爬取所有期刊了,以备后续深入学习。

思路

整个代码其实很简单,以earth-science-reviews这个期刊为例
一文搞定ScienceDirect旗下所有期刊最新期目内容的爬取——仅个人学习使用,切勿滥用_第1张图片
可以看到我需要的内容在红色圈中,就可以先获取到该链接,然后进入
一文搞定ScienceDirect旗下所有期刊最新期目内容的爬取——仅个人学习使用,切勿滥用_第2张图片
这里,我需要最新期目的期目号和发行时间,以及每篇文章的题目和链接。

代码

这里我新建了一个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)

效果

一文搞定ScienceDirect旗下所有期刊最新期目内容的爬取——仅个人学习使用,切勿滥用_第3张图片
祝各位学习愉快,工作顺利。共勉。

你可能感兴趣的:(python爬虫,python)