使用具有JavaScript格式的Python抓取网站

时间:2019-09-16 00:49:09

标签: python web-scraping

我没有太多从网站上抓取数据的经验。我通常使用Python的“请求”和“ BeautifulSoup”。

我需要从此处https://publons.com/awards/highly-cited/2019/下载表格 我通常用鼠标右键单击并检查,但是格式不是我惯用的格式。我做了一些阅读,似乎是Javascript,可以从https://publons.com/static/cache/js/app-59ff4a.js中提取数据。我读了其他推荐Selenium和PhantomJS的文章。但是,由于我不是该计算机的管理员(我使用Windows),因此无法修改路径。关于如何解决这个问题的任何想法?如果没有选择Python,很高兴与R搭配使用。

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您通过开发工具监视网络流量,您将看到该页面进行的API调用以更新内容。返回的信息为json格式。

例如:第1页

import requests

r = requests.get('https://publons.com/awards/api/2019/hcr/?page=1&per_page=10').json()

您可以循环更改页面参数以获得所有结果。

结果总数已通过r['count']在第一个响应中指出,因此很容易计算要循环的#页,每页10个结果。只要确保对您的要求保持礼貌即可。

概述:

import math, requests

with requests.Session() as s:
    r = s.get('https://publons.com/awards/api/2019/hcr/?page=1&per_page=10').json()
    #do something with json. Parse items of interest into list and add to a final list? Convert to dataframe at end?
    number_pages = math.ceil(r['count']/10)

    for page in range(2, number_pages + 1):
        #perhaps have a delay after X requests
        r = s.get(f'https://publons.com/awards/api/2019/hcr/?page={page}&per_page=10').json()
        #do something with json. Parse items of interest into list and add to a final list? Convert to dataframe at end?