Skip to content
This repository was archived by the owner on May 25, 2024. It is now read-only.

U-73A5/ChiZaiDongNongWD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChiZaiDongNongWD

用于爬取东农饭团上的数据。

样例

一个简单样例
import czneau

dld = czneau.CCN()

dld.indentSize = 4
dld.pageSize = 2

dld.crawlHot() # 获取热评
dld.crawlHot(2) # 继续获取热评
dld.crawlComment()
dld.saveData('czneau.json')

for key in dld: # 遍历所有内容打印键和值
    print(key, dld[key]['likeCount'])

dld.saveStatus('downloadStatus.json') # 保存下载状态,以在其它地方加载以继续下载

# print(a.values()) # 拥有所有 dict的方法

process

一个更安全的样例
import czneau

a = czneau.CCN()

a.raiseEE = False
try:
    a.crawlHot(50)
except czneau.RaiseCountError:
    print(f'The Expect Error has raised {a.errorMax} times.')
## WARNING:
# 这里可以被忽视的异常只有 ProxyError 和 ChunkedEncodingError
# 达到异常次数上限后抛出 RaiseCountError
# 如需更保险的方式,请尝试
#     try: a.crawlHot(50)
#     except:
#         # 处理异常 #

a.saveData('a_data.json')
a.saveStatus('a_status.json')

部分数据说明

获取评论保持原json数据不变。
CCN() = {
    int() # 键值,即为 value中的 id
    :{
        'id': int(), # 使用 id 判定是否为相同数据
        'nickname': str(), #
        'content': str(), # 评论内容
        'likeCount': int(), # 点赞数
        'commentCount': int(), # 评论数
        'commentList': list(), # 仅在 commentCount 非 0 时有该关键字,非原 json数据
        'date': int() # 与发表时间相关
        ##...
    },
    ##...
}
获取的回复添加在原json数据中。
# commentCount非 0 时有
CCN()[0]['commentList'] = [
    {
        'id': int(), # 该 id 不参与任何判断
        'nickname': str(),
        'content': str(), # 回复内容
        'likeCount': int(), # 回复点赞数
        'date': int() # 与发表时间相关
        ##...
    },
    ##...
]

额外接口说明

数据相关
## 爬取热评
def crawlHot(self,
    crawlTimes=1, # 爬取次数;(2022/4/3)默认'pageSize'='29'下,当其值约为3500时可以爬取所有数据(该值为估算,没有测试)。
    sleepTime=None, # 每次爬取间隔,默认在[0, 1]秒之间
    level=0 # 为优化后续封装的输出做的工作
) -> int: ...

## 爬取最新评论
def crawlNew(self,
    crawlTimes=1,
    sleepTime=None, # 每次爬取间隔,默认在[0, 1]秒之间
    level=0
) -> int: ...

## 爬取评论回复 // 默认爬取时不爬取评论
def crawlComment(self,
    sleepTime=None, # 每次爬取间隔,默认在[0, 3]秒之间
    level=0
) -> None: ...
## 加载已有数据
def loadData(self,
    file: str # 数据存放地址
) -> bool: ...

## 保存数据
def saveData(self,
    file: str # 数据存放地址
) -> bool:

如需要评论或回复的日期,在没什么用函数中查找

data

爬取参数设置
CCN().proxies = { # 代理设置
    'http': 'http://0.0.0.0:0000',
    'https': 'https://0.0.0.0:0000'
}
CCN().pageSize = 17 # 每次请求数据大小,默认在[15, 29]内随机选取,不能超过 29
CCN().indentSize = 4 # 用于控制输出缩进,默认为 2
CCN().userAgent = [] # 接受一个字符串或列表,请求用户代理从这里随机选取。默认有 51条

## 加载下载状态
# 加载下载状态而不加载数据或加载非上次任务数据,均将从加载的状态出发继续下载
CCN().loadStatus(self,
    file: str # 状态存放地址
) -> bool: ...

## 保存下载状态
CCN().saveStatus(self,
    file: str # 状态存放地址
) -> bool: ...
异常捕获
CCN().raiseEE = True # 是否抛出按预期捕获的异常,默认抛出
CCN().errorMax = 3 # 当 CCN().raiseEE=False 时,异常捕获超过约定次数后抛出 RaiseCountError ,默认次数为 3 次
一些没什么用函数
## 弹幕输出内容,就是玩
def barrage(self,
    sleepTime: int=3 # 默认每个对话输出后停留 3秒
    comment: bool=True # 输出是否包含回复,默认包含
) -> None: ...

## baseData 为 CCN() 实例中的每一个元素
def getTime(x: baseData) -> str: ... # 获取评论或回复时间 'Thu Apr 14 16:41:12 2022'
def getDay(x: baseData) -> int: ... # 获取信息发表当天是星期几 1~7
def getMonth(x: baseData) -> int: ... # 获取信息发表当天是几月 1~12
def getDate(x: baseData) -> int: ... # 获取信息发表当天是记号 1~28/29/30/31
def getHour(x: baseData) -> int: ... # 获取信息发表时是几时 0~24
def getMinute(x: baseData) -> int: ... # 获取信息发表时是几分  0~60
def getSecond(x: baseData) -> int: ... # 获取信息发表时是几秒 0~60
def getYear(x: baseData) -> int: ... # 获取信息发表在那一年 2022

barrage barrage_show time

安装

pip install czneau

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages