一个简单的爬虫主要由主调程序、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