经济学人文章爬虫

因为偶然的机会知道了经济学人这个网站,下面是引自百度百科的相关介绍:

《经济学人》是一份由伦敦经济学人报纸有限公司出版的杂志,创办于1843年9月,创办人詹姆士·威尔逊。杂志的大多数文章写得机智,幽默,有力度,严肃又不失诙谐,并且注重于如何在最小的篇幅内告诉读者最多的信息。

杂志主要关注政治和商业方面的新闻,但是每期也有一两篇针对科技和艺术的报导,以及一些书评。杂志中所有文章都不署名,而且往往带有鲜明的立场,但又处处用事实说话。主编们认为:写出了什么东西,比出自谁的手笔更重要。

但是该网站的文章一个账号每周只能免费阅读3篇,订阅价格大约是一个月100港元。

假如是经常阅读该网站文章自然是订阅支持一下更好,但假如只是偶尔想看几篇文章订阅的性价比就不高了。

但是我在点开网页的过程中发现到文章先是被完全加载出来后突然消失到只剩标题的,由此我猜测该网站的每周3篇文章上限这条规定是识别Cookie后执行的,由此我再猜测假如果我只写一个requests请求是不是就能拿到含有文章信息的网页源代码呢?然后再解析一下是不是就能拿到文章的文本了呢?

下面是我写的一个简单的文章爬虫:

import requests
from pyquery import PyQuery as pq

url = 'https://www.economist.com/special-report/2017/10/05/commodities-are-not-always-bad-for-you'

def get_text(url):
    html = requests.get(url).text
    doc = pq(html)
    article = doc('article')
    h1 = article('h1 span').text()  # 文章标题
    print(h1+'\n')
    rubric = article('.blog-post__rubric').text()  # 红字标题
    print(rubric+'\n')

    div_imgs = article('.blog-post__image').items()  # 文章图片
    text = article('.blog-post__text')  # 文章文本
    ps = text('p').items()  # 文章段落
    h2s = text('.xhead').items()  # 文章小标题

    for p in ps:
        if not p.text().startswith('Upgrade your inbox'):  # 过滤一行广告文本
            print(p.text()+'\n')

    for h2 in h2s:
        print(h2.text()+'\n')

    for div_img in div_imgs:
        img = div_img('img').attr.src
        print(img)

get_text(url)

这个爬虫没加任何headers,但确实能拿到文章内容和文章中的配图,只是不知道小标题在文章的什么位置。

当然这是一个不规范的很简陋的爬虫脚本。目的只是为了个人能多阅读两篇经济学人杂志文章。下面是该爬虫运行示例:

留下评论