Python网络爬虫

一个简单的爬虫主要由主调程序、url管理器、下载器、解析器部分构成。

(1)爬虫主调程序:用于控制爬虫的运行状态

if __name__ == "__main__":
    obj = ImoocMain()    # 主调程序类
    obj.craw_shikigami() # 爬取基础数据

def craw_shikigami(self):
    self.urls.add_new_url(self.root_url_shikigami)
    if self.urls.has_new_url():
        new_url = self.urls.get_new_url()
        response = self.downloader.download_with_header(new_url, self.header_shikigami)
        shikigami_dict = self.parser.parser_shikigami(response.read().decode("utf-8"))
   

(2)url管理器:用于管理爬虫爬取的url地址

    先将待爬取的url添加到url管理器中:

self.urls.add_new_url(self.root_url_shikigami)

    当url管理器中存在待爬取的url时,爬虫获取待爬取的url

new_url = self.urls.get_new_url()

    其中,self.urls为url管理器:

self.urls = url_manager.UrlManager()

(3)下载器:用于获取url管理器中待爬取的url信息

    当获取到待爬取的url时,将会调用下载器来下载待爬取的url的信息

    self.downloader = html_downloader.HtmlDownloader()   

    response = self.downloader.download_with_header(new_url, self.header_shikigami)

    下载时根据不同的url,需要对爬虫进行不同的伪装:

    a、普通下载

    这种情况下对数据的获取不需要进行伪装:

    

def download(self, new_url):
    response = request.urlopen(new_url)
    return response

    b、某些网页为防止爬虫爬取数据,对请求的url进行筛选过滤,为了成功获取数据,需要将爬虫伪装成浏览器

def download_with_header(self, new_url, headers):
    req = request.Request(new_url, None, headers)
    response = request.urlopen(req)
    return response

(4)解析器:用于对下载下来的url信息进行解析

    下载完之后,需对下载的内容进行解析处理,系统将会调用

shikigami_dict = self.parser.parser_shikigami(response.read().decode("utf-8"))

来对网页内容进行解析处理
具体程序可参考:https://github.com/LoJve/OnmyoujiImooc.git


猜你喜欢

转载自blog.csdn.net/u011585024/article/details/79953664