python实现的一只从百度开始不断搜索的小爬虫


Posted in Python onAugust 13, 2013

文中用到了BeautifulSoup这个库, 目的是处理html文档分析的, 因为我只是提取了title的关键字,所以可以用正则表达式代替, 还有一个库是jieba, 这个库是中文分词的作用, 再有一个库是 chardet, 用来判断字符的编码, 本想多线程的, 但是自认为被搞糊涂了,就放弃了

#coding:utf-8
import re
import urllib
import urllib2
import sys
import time
import Queue 
import thread
import threading
import jieba
import chardet
from BeautifulSoup import BeautifulSoup as BS

DEEP = 1000
LOCK = threading.Lock()
PATH = "c:\\test\\"
urlQueue = Queue.Queue()
def pachong():
 url = 'http://www.baidu.com'
 return url
def getPageUrl(html):
 reUrl = re.compile(r'<\s*[Aa]{1}\s+[^>]*?[Hh][Rr][Ee][Ff]\s*=\s*[\"\']?([^>\"\']+)[\"\']?.*?>')
 urls = reUrl.findall(html)
 for url in urls:
  if len(url) > 10:
   if url.find('javascript') == -1:
    urlQueue.put(url)
def getContents(url):
 try:
  url = urllib2.quote(url.split('#')[0].encode('utf-8'), safe = "%/:=&?~#+!$,;'@()*[]")
  req = urllib2.urlopen(url)
  res = req.read()
  code = chardet.detect(res)['encoding']
  #print
  #print code
  res = res.decode(str(code), 'ignore')
  res = res.encode('gb2312', 'ignore')
  code = chardet.detect(res)['encoding']
  #print code
  #print res
  return res
 except urllib2.HTTPError, e:
  print e.code
  return None
 except urllib2.URLError, e:
  print str(e)
  return None
def writeToFile(html, url):
 fp = file(PATH + str(time.time()) + '.html', 'w')
 fp.write(html)
 fp.close()
 
def getKeyWords(html):
 code = chardet.detect(html)['encoding']
 if code == 'ISO-8859-2':
  html.decode('gbk', 'ignore').encode('gb2312', 'ignore')
 code = chardet.detect(html)['encoding']
 soup = BS(html, fromEncoding="gb2312")
 titleTag = soup.title
 titleKeyWords = titleTag.contents[0]
 cutWords(titleKeyWords)
def cutWords(contents):
 print contents
 res = jieba.cut_for_search(contents)
 res = '\n'.join(res)
 print res
 res = res.encode('gb2312')
 keyWords = file(PATH + 'cutKeyWors.txt', 'a')
 keyWords.write(res)
 keyWords.close()
def start():
 while urlQueue.empty() == False:
  url = urlQueue.get()
  html = getContents(url)
  getPageUrl(html)
  getKeyWords(html)
  #writeToFile(html, url)
  
if __name__ == '__main__':
 startUrl = pachong()
 urlQueue.put(startUrl)
 start() 
Python 相关文章推荐
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
zookeeper python接口实例详解
Jan 18 Python
Apache部署Django项目图文详解
Jul 30 Python
python3调用windows dos命令的例子
Aug 14 Python
python  logging日志打印过程解析
Oct 22 Python
python实现猜拳游戏
Mar 04 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
python 装饰器重要在哪
Feb 14 Python
Python 多线程处理任务实例
Nov 07 Python
python用于url解码和中文解析的小脚本(python url decoder)
Aug 11 #Python
python 合并文件的具体实例
Aug 08 #Python
python备份文件以及mysql数据库的脚本代码
Jun 10 #Python
Python 变量类型及命名规则介绍
Jun 08 #Python
Python 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 #Python
python strip()函数 介绍
May 24 #Python
Python的词法分析与语法分析
May 18 #Python
You might like
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
js实现简单的秒表
2020/01/16 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python logging通过json文件配置的步骤
2020/04/27 Python
Pandas的Apply函数具体使用
2020/07/21 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
股份转让协议书
2014/04/12 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书