最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python实现简单爬虫

来源:动视网 责编:小采 时间:2020-11-27 14:27:18
文档

Python实现简单爬虫

Python实现简单爬虫:简介爬虫是一段自动抓取互联网信息的程序。它的价值是互联网数据为我所有。利用爬取到的数据,可以做很多的事情如:可以进行数据统计,对比;可以利用爬取的数据做某一方面的app;也可以利用爬取的数据做一个新闻阅读器等等。爬虫架构1)URL管理器 2)网页下
推荐度:
导读Python实现简单爬虫:简介爬虫是一段自动抓取互联网信息的程序。它的价值是互联网数据为我所有。利用爬取到的数据,可以做很多的事情如:可以进行数据统计,对比;可以利用爬取的数据做某一方面的app;也可以利用爬取的数据做一个新闻阅读器等等。爬虫架构1)URL管理器 2)网页下


简介

爬虫是一段自动抓取互联网信息的程序。它的价值是互联网数据为我所有。利用爬取到的数据,可以做很多的事情如:可以进行数据统计,对比;可以利用爬取的数据做某一方面的app;也可以利用爬取的数据做一个新闻阅读器等等。

爬虫架构

1)URL管理器
2)网页下载器
3)网页分析器
4)爬虫调用器
5)价值数据使用

爬虫实现

1)调度器实现

# coding:utf-8
import url_manager
import html_downloader
import html_parser
import html_outputer
import url_manager
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 == 1000:
 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)

2)URL管理器实现

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

3)URL下载器实现

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()

4)URL解析器实现

from bs4 import BeautifulSoup
import re
import urlparse
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

5)价值数据输出显示

# coding:utf-8
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("<meta charset="UTF-8">")
 fout.write("<body>")
 fout.write("<table>")
 for data in self.datas:
 fout.write("<tr>")
 fout.write("<td>%s</td>" % data['url'])
 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()

执行

本爬虫为爬取百度百科与Python关键字相关的1000个静态网页,对网页中的数据,主要提取关键词和摘要信息,并将爬取的信息以HTML文件的方式存储,之后利用浏览器打开即可实现访问。

文档

Python实现简单爬虫

Python实现简单爬虫:简介爬虫是一段自动抓取互联网信息的程序。它的价值是互联网数据为我所有。利用爬取到的数据,可以做很多的事情如:可以进行数据统计,对比;可以利用爬取的数据做某一方面的app;也可以利用爬取的数据做一个新闻阅读器等等。爬虫架构1)URL管理器 2)网页下
推荐度:
标签: 简单 实现 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top