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小技巧之批量抓取美女图片
Jun 06 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
django 创建过滤器的实例详解
Aug 14 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
浅谈django orm 优化
Aug 18 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
python zip,lambda,map函数代码实例
Apr 04 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
Django后端按照日期查询的方法教程
Feb 28 Python
Python入门之使用pandas分析excel数据
May 12 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
判断网页编码的方法python版
2016/08/12 Python
python 文件操作删除某行的实例
2017/09/04 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
使用python实现滑动验证码功能
2019/08/05 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python实现LRU热点缓存及原理
2019/10/29 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers