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远程桌面协议RDPY安装使用介绍
Apr 15 Python
python追加元素到列表的方法
Jul 28 Python
快速查询Python文档方法分享
Dec 27 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Python分支语句与循环语句应用实例分析
May 07 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
详解使用Python下载文件的几种方法
Oct 13 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
解决virtualenv -p python3 venv报错的问题
Feb 05 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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
德生1994机评
2021/03/02 无线电
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
动态样式类封装JS代码
2009/09/02 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
高二物理教学反思
2014/02/08 职场文书
聚美优品的广告词
2014/03/14 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
高三英语教学计划
2015/01/23 职场文书
土地租赁协议书
2015/01/29 职场文书
怎样写辞职信
2015/02/27 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
七夕情人节问候语
2015/11/11 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python
Oracle锁表解决方法的详细记录
2022/06/05 Oracle