spider_main.py
# coding:utf8 from baike import url_manager from baike import html_downloader from baike import html_outputer from baike import html_parser class SpiderMain(object): def __init__(self): self.urls = url_manager.UrlManager() self.downloader = html_downloader.HtmlDownloader() self.parser = html_parser.HtmlParser() self.outputer = html_outputer.HtmlOutputer() def craw(self, root_url): count = 1 self.urls.add_new_url(root_url) while self.urls.has_new_url(): try: new_url = self.urls.get_new_url() print 'craw %d : %s' %(count, new_url) html_cont = self.downloader.download(new_url) new_urls, new_data = self.parser.parse(new_url, html_cont) self.urls.add_new_urls(new_urls) self.outputer.collect_data(new_data) if count == 100: break; count = count + 1 except: print 'craw failed' self.outputer.output_html() if __name__ == "__main__": root_url = "http://baike.baidu.com/view/21087.htm" obj_spider = SpiderMain() obj_spider.craw(root_url)
html_downloader.py
# coding:utf8 import urllib2 class HtmlDownloader(object): def download(self, url): if url is None: return None response = urllib2.urlopen(url) if response.getcode() != 200: return None return response.read()
html_outputer.py
# coding:utf8 class HtmlOutputer(object): def __init__(self): self.datas = [] def collect_data(self, data): if data is None: return self.datas.append(data) def output_html(self): fout = open('output.html', 'w') fout.write("<html>") fout.write("<body>") fout.write("<table>") # ascii for data in self.datas: fout.write("<tr>") fout.write("<td>%s</td>" % data['url'].encode('utf-8')) fout.write("<td>%s</td>" % data['title'].encode('utf-8')) fout.write("<td>%s</td>" % data['summary'].encode('utf-8')) fout.write("</tr>") fout.write("</table>") fout.write("</body>") fout.write("</html>") fout.close()
html_parser.py
# coding:utf8 import urlparse from bs4 import BeautifulSoup import re class HtmlParser(object): def _get_new_urls(self, page_url, soup): new_urls = set() links = soup.find_all('a', href=re.compile(r"/view/\d+\.htm")) for link in links: new_url = link['href'] new_full_url = urlparse.urljoin(page_url, new_url) new_urls.add(new_full_url) return new_urls def _get_new_data(self, page_url, soup): res_data = {} res_data['url'] = page_url title_node = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find('h1') res_data['title'] = title_node.get_text() summary_node = soup.find('div', class_="lemma-summary") res_data['summary'] = summary_node.get_text() return res_data def parse(self, page_url, html_cont): if page_url is None or html_cont is None: return soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8') new_urls = self._get_new_urls(page_url, soup) new_data = self._get_new_data(page_url, soup) return new_urls, new_data
url_manager.py
# coding:utf8 class UrlManager(object): def __init__(self): self.new_urls = set() self.old_urls = set() def add_new_url(self, url): if url is None: return if url not in self.new_urls and url not in self.old_urls: self.new_urls.add(url) def add_new_urls(self, urls): if urls is None or len(urls) == 0: return for url in urls: self.add_new_url(url) def has_new_url(self): return len(self.new_urls) != 0 def get_new_url(self): new_url = self.new_urls.pop() self.old_urls.add(new_url) return new_url
相关推荐
python爬虫,爬取糗事百科python爬虫,爬取糗事百科python爬虫,爬取糗事百科python爬虫,爬取糗事百科python爬虫,爬取糗事百科python爬虫,爬取糗事百科python爬虫,爬取糗事百科python爬虫,爬取糗事百科python...
python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础python爬虫基础...
Python爬虫--抓取百度百科的前1000个页面的实现。
python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫python爬虫,拉勾网爬虫...
爬虫开发Python开发简单爬虫 实例代码.zip爬虫开发Python开发简单爬虫 实例代码.zip爬虫开发Python开发简单爬虫 实例代码.zip爬虫开发Python开发简单爬虫 实例代码.zip爬虫开发Python开发简单爬虫 实例代码.zip爬虫...
【python爬虫】python爬虫基础知识及简单实践【python爬虫】python爬虫基础知识及简单实践【python爬虫】python爬虫基础知识及简单实践【python爬虫】python爬虫基础知识及简单实践【python爬虫】python爬虫基础知识...
最新版的python爬虫知识,其中还介绍了Android开发的基础知识。 目录: 网络协议&爬虫简介;爬虫请求模块;正则表达式;xpath;Beautiful Soup库;selenium;多线程;Scrapy框架;CrawSpider使用和settings文件讲解...
Python网络爬虫技术 第1章 Python爬虫环境与爬虫简介 教案.pdfPython网络爬虫技术 第1章 Python爬虫环境与爬虫简介 教案.pdfPython网络爬虫技术 第1章 Python爬虫环境与爬虫简介 教案.pdfPython网络爬虫技术 第1章 ...
1 Python_百科爬虫
基于python和定向爬虫的商品比价系统基于python和定向爬虫的商品比价系统基于python和定向爬虫的商品比价系统基于python和定向爬虫的商品比价系统基于python和定向爬虫的商品比价系统基于python和定向爬虫的商品比价...
本书从Python的安装开始,详细讲解了Python从简单程序延伸到Python网络爬虫的全过程。本书从实战出发,根据不同的需求选取不同的爬虫,有针对性地讲解了几种Python网络爬虫。本书共8章,涵盖的内容有Python语言的...
python爬虫,爬虫破解pexels高清原图python爬虫,爬虫破解pexels高清原图python爬虫,爬虫破解pexels高清原图python爬虫,爬虫破解pexels高清原图python爬虫,爬虫破解pexels高清原图python爬虫,爬虫破解pexels高清...
山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》.docx山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》.docx山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》.docx山东建筑...
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
讲诉python爬虫的20个案例 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Python爬虫 - 爬取百度百科页面.zip
用python实现个一个百度百科爬虫工具,运行环境为python3,程序可以直接运行,简单实用,方便初学者学习的爬虫代码。
Python网络爬虫与数据采集
python网络爬虫实战 pdf是一本由胡松涛所著的python教程工具书,作者以大量实例为基础详细介绍了网络爬虫的编写全过程,非常适合Python网络爬虫初学者以及相关专业师生使用! python网络爬虫实战电子书介绍 ...
81个Python爬虫源代码,内容包含新闻、视频、中介、招聘、图片资源等网站的爬虫资源