Python简单获取人民网留言板数据

人民网留言板为动态加载网站,但是可以通过网络查看到数据接口,所以可以简单的获取数据。废话不多说,直接上代码。

# -*- codeing = utf-8 -*-
# @Time : 2024/6/18 0018 15:36
# @Author : Kevin
# @File : main.py
# @Software : PyCharm

import requests
import json
import pandas as pd
import re
from datetime import datetime

#抓取一页数据
def SpiderOnePage(pageindex):
    url='http://liuyan.people.com.cn/v2/threads/search?sortType=1'
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.252.400 QQBrowser/12.6.5677.400',
        'Referer':'http://liuyan.people.com.cn/messageSearch?keywords=%E6%83%A0%E6%B5%8E%E5%8C%BA'
    }
    '''
    参数转化,为了拼接页码
    但是实际测试是没太大意义,只做学习用途
    '''
    param= "{\"position\":0,\"keywords\":\"惠济区\",\"fid\":null,\"domainId\":null,\"typeId\":null,\"timeRange\":null,\"ansChecked\":true,\"stTime\":null,\"sortType\":\"1\",\"page\":"+str(pageindex)+",\"rows\":10,\"threadsStatus\":2}"

    '''
    数据拼接
    signature这个为签名,由JS根据MD5加密方式产生,服务器端进行验证,每一次请求会产生新的,
    所以直接使用换页访问的方式无法获取到数据,因此单次只能获取一页数据,
    因仅测试学习,未做深入研究
    当然,还可以通过selenium方式进行获取
    '''
    data={
        'appCode': "PC42ce3bf35534a9",
        'param':  param ,
        'signature': "57d0181c6696b009a21153011c39ef0c",
        'token': ""
    }
    #请求数据
    resPage=requests.post(url=url,headers=headers,data=data)
    #将json数据转化为Python对象,方便操作
    res=json.loads(resPage.text)
    print(res)
    if(res['msg']!='ok'): #如果状态不对 则直接返回
        return False
    data=res['data']['data'] #获取整页的信息列表

    #循环当页数据,获取指定栏位的值
    #并对值进行加工
    for contentTemp in data:

        contentTemp['content'] = re.sub('<[^<]+?>', '', contentTemp['content'])
        contentTemp['subject'] = re.sub('<[^<]+?>', '', contentTemp['subject'])
        contentTemp['createDateline'] = datetime.utcfromtimestamp(contentTemp['createDateline']).strftime('%Y-%m-%d %H:%M:%S')
        contentTemp['dateline'] = datetime.utcfromtimestamp(contentTemp['dateline']).strftime('%Y-%m-%d %H:%M:%S')
        contentTemp['threadsCheckTime'] = datetime.utcfromtimestamp(contentTemp['threadsCheckTime']).strftime('%Y-%m-%d %H:%M:%S')
        contentTemp['lastAnswerTime'] = datetime.utcfromtimestamp(contentTemp['lastAnswerTime']).strftime('%Y-%m-%d %H:%M:%S')
        contentTemp['canHurryTime'] = datetime.utcfromtimestamp(contentTemp['canHurryTime']).strftime('%Y-%m-%d %H:%M:%S')

    print(data)

    df = Createxlsx(data)

def SpiderOneItem():
    print('1')

def Createxlsx(data):
    df = pd.DataFrame(data,columns=['content','subject','typeName','domainName','createDateline','lastAnswerTime', 'stateInfo'])
    df.to_excel('人民网.xlsx',index=False)

if __name__=='__main__':
    pageindex=3
    SpiderOnePage(pageindex)

over!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值