欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-06 20:30:02
...

学了两节课的 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 函数是将内容保存至本地,需要两个参数,内容和文件名。没什么好讲的。

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