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 strip lstrip rstrip使用方法
Sep 06 Python
python使用Berkeley DB数据库实例
Sep 26 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
Python实现简单多线程任务队列
Feb 27 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
Python设计模式之代理模式简单示例
Jan 09 Python
python SMTP实现发送带附件电子邮件
May 22 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
使用IPython或Spyder将省略号表示的内容完整输出
Apr 20 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 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
文件上传程序的全部源码
2006/10/09 PHP
ajax php 实现写入数据库
2009/09/02 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
Python解决八皇后问题示例
2018/04/22 Python
浅谈flask源码之请求过程
2018/07/26 Python
tornado+celery的简单使用详解
2019/12/21 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
Pycharm Git 设置方法
2020/09/15 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
总经理司机岗位职责
2014/02/06 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
老公婚前保证书
2015/02/28 职场文书
单位计划生育责任书
2015/05/09 职场文书
加强党性修养心得体会
2016/01/21 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
MySQL 如何分析查询性能
2021/05/12 MySQL
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫