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根据经纬度计算距离示例
Feb 16 Python
Python 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
Python脚本获取操作系统版本信息
Dec 17 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
用python爬取租房网站信息的代码
Dec 14 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
Django重置migrations文件的方法步骤
May 01 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python 学习GCN图卷积神经网络
May 11 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数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
python不同系统中打开方法
2020/06/23 Python
Python 如何展开嵌套的序列
2020/08/01 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
计算机学生的自我评价分享
2014/02/18 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
公司老总年会致辞
2015/07/30 职场文书
学校学期工作总结
2015/08/13 职场文书
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers