ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用Post方式爬虫

2021-09-16 00:02:12  阅读:181  来源: 互联网

标签:cn 方式 question 爬虫 lists json Post data leetcode


文章目录

使用Post方式爬虫

注意如果Request Payload 是json格式

则请求头需要设置:'Content-Type' : 'application/json'

常用的方法是:如果是要字典(dict)转换为json的话。

调用json.dumps 方法即可。

然后如果要String 转换为json 就用json.loads 即可。

一个实例:

爬虫爬取leetcode的每日一题。

这里使用直接调用的leetcode获取数据的接口,因为leetcode显示题目的逻辑是通过XHR展示,所以找到对应的请求,然后直接模拟获取数据即可。

比较显然。

def question_per_day_by_leetcode():
    url = 'https://leetcode-cn.com/graphql/'
    headers = {
        'user-agent': f.user_agent(),
        'referer': 'https://leetcode-cn.com/problemset/all/',
        'Content-Type': 'application/json'
    }
    data = {
        "query": "\n    query questionOfToday {\n  todayRecord {\n    date\n    userStatus\n    question {\n      "
                 "questionId\n      frontendQuestionId: questionFrontendId\n      difficulty\n      title\n      "
                 "titleCn: translatedTitle\n      titleSlug\n      paidOnly: isPaidOnly\n      freqBar\n      "
                 "isFavor\n      acRate\n      status\n      solutionNum\n      hasVideoSolution\n      topicTags "
                 "{\n "
                 "       name\n        nameTranslated: translatedName\n        id\n      }\n      extra {\n        "
                 "topCompanyTags {\n          imgUrl\n          slug\n          numSubscribed\n        }\n      "
                 "}\n "
                 " }\n    lastSubmission {\n      id\n    }\n  }\n}\n    ",
        "variables": {}, "operationName": "questionOfToday"}
    data = json.dumps(data)
    r = requests.post(url, headers=headers, data=data)
    r.encoding = r.apparent_encoding
    c = r.text
    r.close()  # https://leetcode-cn.com/problems/find-peak-element/
    j = json.loads(c)
    date = j['data']['todayRecord'][0]['date']
    question = j['data']['todayRecord'][0]['question']
    question_url = 'https://leetcode-cn.com/problems/' + question['titleSlug']
    title_cn = question['titleCn']
    topicTags = question['topicTags']
    difficulty = question['difficulty']
    acRate = round(question['acRate'], 2)
    solutionNum = question['solutionNum']  # 题解个数
    tag_lists = []
    for i in topicTags:
        tag_lists.append(i['nameTranslated'])
    tag_lists = ','.join(tag_lists)
    print(tag_lists)
    msg = '每日一题 ({})\n\n标题: {}\n难度: {}\n通过率: {}\n题解个数: {}\n标签: {}\n链接: {}\n' \
        .format(date, title_cn, difficulty, acRate, solutionNum, tag_lists, question_url)
    return msg

标签:cn,方式,question,爬虫,lists,json,Post,data,leetcode
来源: https://blog.csdn.net/weixin_45750972/article/details/120319645

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有