亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

<進擊的蟲師>如何讓程序"懂很多"?

標簽:
職場生活

700

聊聊?

最近在做一个有意思的小项目, 在一个聊天对话中, 你向电脑提出问题, 他会自动分词,然后根据关键字, 自动答复你
对所有的关键字做出解释, 工作量实在太大, 即使能解释, 数据库容量也不够
最后, 想到了实时爬虫...

如何分词?

目前比较好用的分词器 结巴(jieba)

700

今天早上吃了葱油饼和豆腐脑

爬哪里?

现成的百度百科


614

百度百科

爬什么?

那要看用户问什么了, 爬虫最好是实时的, 这样就能根据用户的提问, 直接获取关键词数据


700

效果演示

如何让程序变得更聪明(优化程序)?

每次爬完一个关键词后, 做一个本地备份, 既能避免百度策略临时变更带来的灾难, 也便于根据用户习惯, 优化程序


700

本地数据

爬不到怎么办?

对于用户问到, 但百度百科未收录的关键词, 会自动记录到log日志里面,便于后期改进词库


700

log

实时爬取百度百科

import osimport sysimport requestsfrom lxml import etreeimport reimport time# 从本地获取数据def getLocalData(keyword):
    # 获取/baikeInfo下的所有文件名
    print("尝试查询本地数据信息")
    fileNames = os.listdir('./baikeInfo/')    # 查询本地是否存在缓存数据
    latestCreateTime = ''
    for fileName in fileNames:        # 文件关键字
        fileName0 = fileName.split("_")[0]        # 文件创建时间
        fileName1 = fileName.split("_")[1].split('.')[0]        # 如果当前文件名与目的文件名一致的话
        if fileName0 == keyword:            # 如果时间缓存变量为空, 则存储当前时间戳
            if latestCreateTime == '':
                latestCreateTime = fileName1            # 如果时间缓存变量不为空, 则比较时间戳, 如果当前时间更晚, 则更新时间戳
            elif int(fileName1) > int(latestCreateTime):
                latestCreateTime = fileName1    # 创建需要读取的文件名
    NeedFileName = ''
    result = ''
    # 如果时间戳为空, 则说明文件不存在
    if latestCreateTime == '':        return "未收录本词条"
    else:
        NeedFileName = keyword+"_"+latestCreateTime+'.txt'
        NeedFileNamePath = './baikeInfo/'+NeedFileName        with open(NeedFileNamePath, 'r') as f:
            result = f.read()    return result# 从网络获取数据def getInfo(keyword):
    headers = {        # 设置用户代理头(为狼披上羊皮)
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
    }
    target_url = "https://baike.baidu.com/item/"+ str(keyword)
    result = ""

    try:        # 尝试驱动爬虫获取实时数据
        try:
            data = requests.get(target_url, headers = headers)
            data_etree = etree.HTML(data.content)
            content_list = data_etree.xpath('//div[@class="lemma-summary"]/div[@class="para"]')            # 如果不存在这个词条
            if len(content_list) == 0:                return "未收录本词条"
            for content in content_list:                # 递归抽取子节点数据
                result +=content.xpath('string(.)')        # 如果无法获取响应数据, 则尝试读取本地数据, 做出响应
        except Exception as e:
            result = getLocalData(keyword)            return result    # 如果本地没有数据, 也无法从互联网获取, 则返回未收录词条
    except Exception as e:
        result = "未收录本词条"
        return result    # 数据清洗, 移除类似[1][2]之类的标记字符
    result_list, num = [r for r in re.subn(r'\[\d{0,3}\]', '', result)]    # 数据清洗, 移除多余的空格字符
    result = ''
    for r in result_list:
        result += str(r).strip()    return result# 保存数据, 并通过log记录未收录的的词条def saveData(fileName, info):
    # 记录用户未查找到的词条, 结束函数
    if info == "未收录本词条":        if os.path.exists("./log/"):            pass
        else:
            os.makedirs("./log/")        with open("./log/log.txt", "a") as f:
            newlog = time.strftime("%Y年%m月%d日%H时%M分%S秒")+"  "+"未找到关键词:"+fileName+"\n"
            f.write(newlog)            return

    # 尝试创建baikeInfo文件夹    
    if os.path.exists("./baikeInfo/"):        pass
    else:
        os.makedirs("./baikeInfo/")    # 获取当前的年月日时分秒
    # 将数据保存到baikeInfo中, fileName.txt
    file_path = "./baikeInfo/" + fileName +"_"+ time.strftime("%Y%m%d%H%M%S") +'.txt'
    # 存储数据
    with open(file_path, "w+") as f:
        f.write(info)# 程序入口def getInput():
    wd = ''
    try: 
        wd = sys.argv[1]    except:
        wd = "人工智能"
    result = getInfo(wd)    if len(result)>0:
        saveData(wd,result)
    print(result)    if result == "未收录本词条":        return False
    return resultdef main():
    result = getInput()    return resultif __name__ == '__main__':
    main()




點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
3868
獲贊與收藏
283

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消