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 相关文章推荐
详解Django中Request对象的相关用法
Jul 17 Python
python设计模式大全
Jun 27 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
Python快速优雅的批量修改Word文档样式
May 20 Python
Python 如何解决稀疏矩阵运算
May 26 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.MVC的模板标签系统(四)
2006/09/05 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
理解javascript对象继承
2016/04/17 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
js数组去重的方法总结
2019/01/18 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
同学会主持词
2014/03/18 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
企业法人代表证明书
2015/06/18 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
遗嘱范文
2015/08/07 职场文书
小学四年级作文之写景
2019/08/23 职场文书