【python爬虫】爬虫程序模板(面向对象)

爬虫代码模板

# 程序结构
class xxxSpider(object):
    def __init__(self):
        # 定义常用变量,比如url或计数变量等
       
    def get_html(self):
        # 获取响应内容函数,使用随机User-Agent
   
    def parse_html(self):
        # 使用正则表达式来解析页面,提取数据
   
    def write_html(self):
        # 将提取的数据按要求保存,csv、MySQL数据库等
       
    def run(self):
        # 主函数,用来控制整体逻辑
        #每爬取一个页面随机休眠1-2秒钟的时间
        time.sleep(random.randint(1,2))
       
if __name__ == '__main__':
    # 程序开始运行时间
    spider = xxxSpider()
    spider.run()

实战:爬取贴吧搜索贴的指定面

from urllib import request,parse
import time 
import random
from ua_info import us_list

#目标:只抓取贴吧的指定页

# 定义爬虫类
class MySpider(object):

    #初始化url属性
    def __init__(self):
        self.url = 'http://tieba.baidu.com/f?{}'

    #请求函数
    def get_html(self,url):
        req = request.Request(url=url,headers={'User-Agent':random.choice(us_list)})
        res = request.urlopen(req)
        #windows会存在乱码问题,需要使用 gbk解码,并使用ignore忽略不能处理的字节
        #linux不会存在上述问题,可以直接使用decode('utf-8')解码
        html = res.read().decode('gbk','ignore')
        return html
    
    #解析函数:解析 HTML 页面
    #模块有正则解析模块、bs4 解析模块
    def parse_html(self):
        pass


    #保存函数
    def save_html(self,filename,html):
        with open(filename, 'w') as f:
            f.write(html)

    #入口函数
    def run(self):
        name = input('请输入贴名:')
        begin = int(input('请输入开始页:'))
        stop = int(input('请输入开始页:'))

        for page in range(begin, stop + 1):
            pn = (page-1)*50
            params = {
                'kw':name,
                'pn':str(pn)
            }

            params = parse.urlencode(params)
            url = self.url.format(params)

            #发请求
            html = self.get_html(url)

            #保存文件
            filename = '{}-{}.html'.format(name,page)
            self.save_html(filename,html)

            #提示
            print('第%d页抓取成功'%page)

            #每爬取一个页面随机休眠1-2s
            time.sleep(random.randint(1,2))

if __name__ == '__main__':
    start = time.time()
    spider = MySpider() #实例化一个对象
    spider.run()
    end = time.time()
    
    #程序执行时间
    print('执行时间:%.2f' % (end - start))

你可能感兴趣的:(python,爬虫,开发语言)