Python爬取牛客网的比赛日历

url地址:https://ac.nowcoder.com/acm/contest/calendar

通过F12抓包,可以找到我们需要的内容在

Python爬取牛客网的比赛日历_html

这个XHR请求中。

Python爬取牛客网的比赛日历_html_02

这个data就是我们需要的数据。

1.添加请求头信息:

user-agent:使用自己的电脑信息。

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'
}

2.写一个获取html的函数

def getHtml(url):
    try:
        date = str(datetime.datetime.now().year) + ' - ' + str(datetime.datetime.now().month)
        second = '{:.3f}'.format(time.time())
        params = {
            'token': '',
            'month': date,
            '_': second
        }
        r = requests.get(url, headers=headers, params=params)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        # print(r.headers)
        return r.text
    except:
        return ''

注意添加对应的请求头参数。

这里的month 就是当前年-月

_ 就是1970到现在的毫秒数然后取到小数点后三位。


主函数:

def main():
    # url1 = 'https://ac.nowcoder.com/acm/calendar/contest?token=&month=2021-4&_=1619058988112'
    url1 = 'https://ac.nowcoder.com/acm/calendar/contest'
    html = json.loads(getHtml(url1))
    data = html['data']
    for item in data:
        print(item)

运行结果

Python爬取牛客网的比赛日历_mysql_03

这个人讲得挺好的,关于json.dumps,json.loads, dump(),load()方法。

传送门

菜鸟教程

还可以使用Demjson 第三方库来实现json的编码和解码。