网络爬虫笔记 :一个简单的爬虫框架

学了两节课的 Python 爬虫,也算是入门了吧。敲了两天的案例代码之后,我突然发现,这些代码虽然功能不同,写法各异,但是终归是有章可循的,整体框架是一致的。所以我自己整理了一个简单的爬虫框架,适合初学者学习时参考。

import urllib.request
import urllib.parse
import urllib.error

def loadPage(url):
    '''
        Function: Fetching url and accessing the webpage content
        url: the wanted webpage url
    '''
    headers = {
            'Accept': 'text/html',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
    }
    
    print('To send HTTP request to %s ' % url)
    
    try:
        request = urllib.request.Request(url, headers=headers)
        with urllib.request.urlopen(request) as response:
            return response.read().decode('utf-8')
        
    except urllib.error.URLError as e:
        print(e)
    except urllib.error.HTTPError as e:
        print(e)
        print(e.headers)
    except:
        print('Unknown error')

def writePage(html, filename):
    '''
        Function : 将 html 页面保存至本地 filename 文件中
        html : 网页内容
        filename : 将要保存至的本地文件名
    '''
    print('To write html into a local file %s ...' % filename)
    
    try:
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(str(html))
        print('Work done!')
        print('---'*10)
    except:
        print("Error on writing page!")

def crawlerManager(url):
    '''
        功能: 爬虫调度程序,用于获取所有需要的 url 并依次访问(不过具体怎么获取需要自己写代码去实现)
        url: 初始的 URL,以它为起点获取所有需要的 url。
        
        通过 loadPage 获取网页内容,然后通过 writePage 将其保存至本地文件
    '''
    filename = 'CrawlerTest_tieba.html'         # 本地保存的文件名,命名规则自己定
    page = loadPage(url)                        # 访问 url 并将页面返回
    writePage(page, filename)                   # 将返回的页面保存在本地
        

if __name__ == '__main__':
    
    # 主函数,输入 url (初始的 URL)
    url = 'http://tieba.baidu.com/'         # 以百度贴吧为例
    
    # 爬虫控制器,参数是 初始URL。
    crawlerManager(url)

运行结果:

To send HTTP request to http://tieba.baidu.com/ 
To write html into a local file CrawlerTest_tieba.html ...
Work done!
------------------------------

给代码做一个简单的使用说明

没错,这就是在上次作业【从百度贴吧下载多页话题内容】的代码基础上修改的,添加了异常捕获的功能,这样,我们的代码就没有那么容易崩溃了。

使用时,只需要在 main 函数中填入初始的 url,然后启动爬虫调度程序 crawlerManager。

如果自己已经分析出目标url的组成结构,那么可以在 crawlerManager 中写一个循环,类似于【从百度贴吧下载多页话题内容】那样。

如果是希望从网页内容中提取新的 url,则可以准备一个列表,在获取网页内容时提取其中的url存入列表,然后循环访问列表中的url即可。

然后是 loadPage 函数,作用是解析url,返回网页内容,目前是将所有内容全部返回,将来可以在此基础上加一个解析的过程,提取并返回其中的关键信息。

writePage 函数是将内容保存至本地,需要两个参数,内容和文件名。没什么好讲的。

目前水平有限,只能做到这个地步了,还有其他什么骚操作,等以后学会了再加吧!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页