python爬蟲-抓取內涵吧內涵段子

weixin_33843409發表於2017-12-21

這是個python簡易爬蟲,主要使用了requests和re模組,適合入門。
出處:https://github.com/jingsupo/python-spider/blob/master/day03/04neihanba.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import requests, re, time


class Neihanspider(object):
    def __init__(self):
        self.base_url = 'http://www.neihan8.com/article/list_5_'
        self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
        # 第一層解析的正規表示式 正則裡面的符號不能改,必須照原樣複製過來
        self.first_pattern = re.compile(r'<div class="f18 mb20">.*?</div>', re.S)
        # 第二層解析的正規表示式 去除所有標籤 字元實體 空白 全形空格
        self.second_pattern = re.compile(r'<.*?>|&.*?;|\s|  ')

    # 傳送請求
    def send_request(self, url):
        time.sleep(2)
        try:
            response = requests.get(url, headers=self.headers)
            return response.content
        except Exception as e:
            print e

    # 寫入檔案
    def write_file(self, data, page):
        with open('04neihanba.txt', 'a') as f:
            filename = '第' + str(page) + '頁的段子\n'
            print filename
            f.write('-' * 10 + '\n')
            f.write(filename)
            f.write('-' * 10 + '\n')

            for first_data in data:
                # 第二層解析
                content = self.second_pattern.sub('', first_data)
                f.write(content)
                # 在每個段子結束的時候加個換行
                f.write('\n\n')

    # 排程方法
    def start_work(self):
        for page in range(1, 5):
            # 拼接url
            url = self.base_url + str(page) + '.html'

            # 傳送請求
            data = self.send_request(url)

            # 轉碼
            data = data.decode('gbk').encode('utf-8')

            # 第一層解析
            data_list = self.first_pattern.findall(data)

            # 將資料寫入檔案
            self.write_file(data_list, page)


if __name__ == '__main__':
    spider = Neihanspider()
    spider.start_work()

相關文章