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实现生成简单的Makefile文件代码示例
Mar 10 Python
Python字符串详细介绍
May 09 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
PyTorch中反卷积的用法详解
Dec 30 Python
python如何判断IP地址合法性
Apr 05 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
5道关于python基础 while循环练习题
Nov 27 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函数
2006/10/09 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
编码实现字符串转整型的函数
2012/06/02 面试题
介绍下static、final、abstract区别
2015/01/30 面试题
马智宇婚礼主持词
2014/03/22 职场文书
公司授权委托书
2014/04/04 职场文书
计算机专业求职信
2014/06/02 职场文书
团日活动总结报告
2014/06/25 职场文书
应收账款管理制度
2015/08/06 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
52条SQL语句教你性能优化
2021/05/25 MySQL
python实现A*寻路算法
2021/06/13 Python