# coding=UTF-8
import codecs  # 用来存储爬取到的信息
import json  # 处理json格式的数据
import requests
from bs4 import BeautifulSoup as bs  # 用于数据抽取
import shutil
import os
import time
import configparser
import logging

config_path = 'config.ini'
cf = configparser.ConfigParser()
cf.read(config_path)

def __init__() :
    log_name = './logs/' + time.strftime("%Y-%m-%d.%H:%M:%S", time.localtime()) + '-log.txt'
    logging.basicConfig(level=logging.DEBUG,
                        format='levelname:%(levelname)s filename: %(filename)s '
                               'outputNumber: [%(lineno)d]  thread: %(threadName)s output msg:  %(message)s'
                               ' - %(asctime)s', datefmt='[%d/%b/%Y %H:%M:%S]',
                        filename=log_name, filemode="a")

def logPrint(str):
    logging.info(str)


def getConfigValue(name):
    value = cf.get("config", name)
    return value


def getTime():
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

def getdetailpagebybs(url):
    detail = {}  # 创建一个字典，存放URL、title、newstime等信息
    detail["url"] = url  # 将URL时间存入detail字典中的相应键值中
    page = requests.get(url).content  # 使用requests.get方法获取网页代码，由于bs4可以自动解码URL的编码，所以此处不需要decode
    html = bs(page, "lxml")  # 使用lxml解析器
    title = html.find(class_="main-title")  # 获取新闻网页中的title信息，此处网页中只有一个“class=main-title”，所以使用find即可
    # logPrint(title.text)  # 展示新闻标题
    detail["title"] = title.text  # 将新闻标题以文本形式存入detail字典中的相应键值中
    artibody = html.find(class_="article")  # 使用find方法，获取新闻网页中的article信息
    if artibody.blockquote != None:
        artibody.blockquote.clear()  # 清除广告
    # logPrint(artibody.text)
    detail["artibody"] = artibody.text
    date_source = html.find(class_="date-source")  # 使用find方法，获取新闻网页中的date-source信息
    # 由于不同的新闻详情页之间使用了不同的标签元素，直接抽取可能会报错，所以此处使用判断语句来进行区分爬取
    if date_source.a:  # 判断date-source节点中是否包含有'a'元素
        # logPrint(date_source.span.text)
        detail["newstime"] = date_source.span.text  # 抽取'span'标签中时间信息
        # logPrint(date_source.a.text)
        detail["newsfrom"] = date_source.a.text  # 抽取'a'标签中新闻来源信息
    else:
        # logPrint(date_source("span")[0].text)
        detail["newstime"] = date_source("span")[0].text  # 抽取'span'标签中包含的时间信息
        # logPrint(date_source("span")[1].text)
        detail["newsfrom"] = date_source("span")[1].text  # 抽取'span'标签中包含的新闻来源信息
    timeArray = time.strptime(detail["newstime"], "%Y年%m月%d日 %H:%M")
    detail["newstime"] = time.strftime("%Y-%m-%d %H:%M:00", timeArray)
    return detail  # 函数返回值为存放抽取信息的字典
