python簡單爬蟲:爬取並統計自己博客頁面的信息(一)

1. 什麼是爬蟲

  • 也叫網絡爬蟲,簡單來說,爬蟲就是從一個根網站出發,根據某種規則獲得更多的相關網站的url,自動下載這些網頁並自動解析這些網頁的內容,從中獲取需要的數據。例如爬取某種圖片、某類文本信息等。爬蟲還可以用於編纂搜索引擎的網絡索引。
  • 爬蟲所涉及的知識和技術面非常廣,在本文中不作討論;爬蟲有很多種實現方法,本文提供的python方法僅是其中一種簡單的實現,適用於規模較小的、自娛自樂的應用。有機會會持續更新。
  • 爬蟲會消耗目標系統的資源,作爲一個遵紀守法、品德高尚的好市民,應該考慮目標系統是否願意被爬蟲訪問、負載等問題,以及所爬取的內容是否得當、爬取內容的用途等問題。
  • 這僅僅是本人目前對爬蟲的一個很淺層面的理解,望各位輕噴。

2. 目的

  • 實現爬蟲的所有代碼已上傳至github: spiderMyCsdn
  • 定時爬取自己的csdn博客頁面信息
  • 解析信息爲:閱讀量(views)、粉絲數(fans)、喜歡數(likey)、評論數(comment)、積分(score)、排名(rank)、等級(level)、原創文章數(origin)
  • 結果存爲output-timestamp.csv,另將結果導入本地已手動創建的的mysql數據庫中
  • 每天定時爬取信息並將解析結果通過郵件發送給自己

3. 爬蟲的整體框架

spider-diagram

4. 工程目錄結構

- /config
    - config.ini
- /log
- /result
- /src
    - __init__.py
    - spider_main.py
    - url_manerger.py
    - html_downloader.py
    - html_parser.py
    - outputer.py
    - log.py
    - mysql.py
- main.py
- cronTask.sh

5. 日誌模塊(log.py)

  • 目的是爲了規範輸出日誌,方便後期查看處理日誌、調試代碼,應該養成良好的、規範的日誌習慣

  • 下面是日誌模塊的代碼:

# log.py
# conding=utf-8
import datetime
import logging
import logging.handlers

def setup_custom_logger(name):
    # logger settings
    time_format = "%Y-%m-%d-%H-%M-%S"
    time_now = datetime.datetime.now()
    log_file = "log/log_%s.log" %time_now.strftime(time_format)  # 輸出的日誌的文件路徑和文件名
    log_file_max_size = 1024 * 1024 * 20 # megabytes
    log_num_backups = 3
    log_format = "%(asctime)s [%(levelname)s]: %(filename)s(%(funcName)s:%(lineno)s) >> %(message)s"
    log_date_format = "%m/%d/%Y %I:%M:%S %p"
    log_filemode = "w"  # w:overwrite   a:append

    # setup logger
    # datefmt=log_date_format
    logging.basicConfig(filename=log_file, format=log_format, filemode=log_filemode, level=logging.DEBUG)
    rotate_file = logging.handlers.RotatingFileHandler(
        log_file, maxBytes=log_file_max_size, backupCount=log_num_backups
    )
    logger = logging.getLogger(name)
    logger.addHandler(rotate_file)

    # print log messages to console
    consoleHandler = logging.StreamHandler()
    logFormatter = logging.Formatter(log_format)
    consoleHandler.setFormatter(logFormatter)
    logger.addHandler(consoleHandler)

    return logger
  • 使用日誌模塊輸出日誌的示例:
# coding=utf-8
import logging
# 導入自定義的日誌模塊
import log
# 定義日誌名稱,目的是爲了在整個工程文件中能通過名稱找到對應的日誌對象
logger_name = 'spiderCsdn'
# 創建/獲取名稱爲logger_name的日誌對象
logger = logging.getLogger(logger_name)

def main():
    # 輸出信息
    logger.info('This is an information.')
    # 輸出錯誤信息
    logger.error('This is an error information.')

if __name__ == '__main__':
    main()

輸出結果如下所示,以下內容會保存在/log/log_2018-04-10-20-41-56.log

2018-04-10 20:41:56,733 [INFO]: test.py(main:12) >> This is an information.
2018-04-10 20:41:56,733 [ERROR]: test.py(main:14) >> This is an error information.

6. 全局配置模塊(config.ini)

  • 搭配python自帶的ConfigParser的package,可以按key值取出提前配置好的內容。
  • 主要是方便代碼移植,比如數據庫的登錄密碼更改後,直接在config.ini中更改即可,不需要去翻每一個用到數據庫配置的代碼文件,避免可能改漏的情況。
  • 以下是配置文件的書寫示例:
# config.ini
# 注意從這裏取出的內容都是字符串,即使不加引號
# []內是key值,不區分大小寫
# 每一個key值下可以有多個變量
[logger]
logger_name = spiderCsdn
  • 取配置內容示例:
# 導入ConfigParser模塊
import ConfigParser
# 創建一個config解析器對象
config = ConfigParser.ConfigParser()
# 讀取配置文件
config.read('config/config.ini')
# 按key值和變量名獲取變量內容
# logger_name = 'spiderCsdn'
logger_name = config.get('logger', 'logger_name')
# 使用獲取到的內容
logger = log.setup_custom_logger(logger_name)

接下來會介紹URL管理器和html下載器的內容:python簡單爬蟲:爬取並統計自己博客頁面的信息(二)

如果想看整個工程的代碼,可以戳 github: spiderMyCsdn

謝謝大家~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章