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中表达式x += y和x = x+y 的区别详解
Jun 20 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Django自定义manage命令实例代码
Feb 11 Python
python实现归并排序算法
Nov 22 Python
pip指定python位置安装软件包的方法
Jul 12 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Python自动创建Excel并获取内容
Sep 16 Python
python 将html转换为pdf的几种方法
Dec 29 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 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 iconv() : Detected an illegal character in input string
2010/12/05 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
js日期联动示例
2014/05/02 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
Python中动态创建类实例的方法
2017/03/24 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
Python3.4解释器用法简单示例
2019/03/22 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
采购主管的岗位职责
2013/12/17 职场文书
公司成立感言
2014/01/11 职场文书
出国留学担保书
2014/05/20 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
win10搭建配置ftp服务器的方法
2022/08/05 Servers