python实现的一只从百度开始不断搜索的小爬虫
发布时间:2022-05-20 10:46:18
文中用到了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()


猜你喜欢
- 最近在做一个魔术网的div+css切割,昨晚发现了长期以来一直无记录下来的问题!关于兼容IE跟FF的float属性。趁现在还清醒赶紧记下笔记
- 在一些网页应用中,就比如在投票系统中,当我们进行的是多项投票时,我们要求用户最多只能选择几项进行投票,这也是就是说选择复选框的个数最多几个.
- 本文实例讲述了Python设计模式之备忘录模式原理与用法。分享给大家供大家参考,具体如下:备忘录模式(Memento Pattern):不破
- 函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串。通过指
- 1. ref在Vue3中,ref成为了一个全家桶,除了用于创建响应式数据之外,还可以用于引用DOM元素、组件实例和其他对象。以下是ref的具
- 一个封装好的链接Oracle数据库的工具类,可以方便的获取Connection对象关闭Statement、ResultSet、Statmen
- User模型 User模型是这个框架的核心部分。他的完整的路径是在django.contrib.auth.models.User。字段 内置
- 用python来实现一个抽奖程序,供大家参考,具体内容如下主要功能有1.从一个csv文件中读入所有员工工号2.将这些工号初始到一个列表中3.
- 一、ADO.Net数据库连接字符串1、OdbcConnection(System.Data.Odbc)(1)SQL Sever标准安全:&q
- 我就废话不多说了,大家还是直接看代码吧~package main import "os" func main () {
- python matplotlib画图产生的Type 3 fonts字体不兼容更改措施:使用Type 42字体来生成PostScript 和
- 0、前言评判一个算法的好坏的标准:时间复杂度空间复杂度1、归并排序算法是什么?冒泡排序(Bubble Sort)是一种建立在归并操作上面的一
- 一、流程分析分析发现密码加密,且发送POST请求时header必须携带x-csrftoken,否则是报403。而x-csrftoken是在第
- varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大
- 前言在论坛中回答了一个问题,导入csv 数据,并对导入的数据增加一个新的列date datetime。要求在10s内完成,200w行数据的导
- 本文将展示一个开源JavaScript库,该脚本库给AJAX应用程序带来了书签和后退按钮支持。在学习完这个教程后,开发人员将能够获得对一个A
- 公司后端服务使用 java 重构后,很多接口采用了阿里的 dubbo 协议。而 python 是无法直接调用 dubbo 接口的,但可以通过
- 本人在做项目的时候遇到一个问题:某个函数需要在每个小时的 3 分钟时候被执行一次,我希望我 15:45 启动程序,过了18 分钟在 16:0
- 嗯,你可以说我很无聊。最近疯狂加班,今天才得以有时间搞一个CSS的像素图来消遣休息下。先看效果:运行代码框<!DOCTYPE html
- 进入主题1.import turtle as timport matht.pensize(3)t.tracer(10)t.hideturtl