您的位置:首页 > 编程语言 > Python开发

Python爬虫初探

2016-06-08 15:45 381 查看
闲来无事研究了一下python的爬虫技术,现在总结一下

首先电脑上要有python的环境,mac上应该自动安装有2.x版本的,可以从网上下载最新的3.5.1,运行使用python3而不是python.我这里新下了3导致pip命令失效,应该是路径有问题,用pip3命令可以.

testClass.py 文件

#加上这个可以输入中文
# -*- coding:utf-8 -*-
#导入几个内置库
import urllib;
import urllib2;
import re;
import myTool;
#模拟浏览器和请求头,否则显示访问出错
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)';
headers = {'User-Agent':user_agent};

#对于class的使用还不了解
class Spider:

def __init__(self):
#默认网址
self.url = "";
#lowB English
self.tool = myTool.myZhengze();

def getHtml(self,url):
request = urllib2.Request(url,headers=headers);
response = urllib2.urlopen(request);
#此处更改网站编码方式,有的是GBK的,可以查看网页源代码的meta charset属性
return response.read().decode('utf-8');
#得到网址取出文字并写入文件
def getInfo(self,html):
#初步取出
#正则表达式解释: *匹配1个除\n外的字符,*匹配前一个字符0次货无数次,?匹配前一个字符0次或一次,也就是结束匹配
iden = '<div class="content">.*?</div>';
temp = re.compile(iden,re.S);
result = re.findall(temp,html);
for item in result:
middle = self.tool.myReplace(item);
hahah = self.tool.writeToFile('端午节快乐.txt',middle);
print middle;
return result;
#得到网址取出网站并下载图片
def getPic(self,html):
idenPic = '<img src=.*?.jpg';
tempPic = re.compile(idenPic,re.S);
result = re.findall(tempPic,html);
x = 0;
for item in result:
removeSome = re.compile('<img src="|"');
middle = re.sub(removeSome,'',item);
middle.strip();
#urllib.urlretrieve()方法,直接将远程数据下载到本地。
urllib.urlretrieve(middle,'%s.jpg' % x);
x+=1;
print middle;
return result;

spider = Spider();
a = spider.getHtml('http://www.qiushibaike.com/hot/1');
#print a;
b = spider.getInfo(a);
c = spider.getPic(a);
#print b;


myTool.py 文件

# -*- coding:utf-8 -*-
import re;
import sys;
reload(sys);
sys.setdefaultencoding('utf-8');
class myZhengze:
removeQiuBai = re.compile('<div class="content">');
removeDiv = re.compile('<div>|</div>')
removeBr = re.compile('<br/>');
#removeDiv = re.compile('<P>|<span class="copyright">|<P>')
def __init__(self):
return None;

def myReplace(self,x):
x = re.sub(self.removeQiuBai,"",x);
x = re.sub(self.removeDiv,"",x);
x = re.sub(self.removeBr,'',x);
return x.strip();
def writeToFile(self,filename,txt):
# 'w'是覆盖模式 'a'是追加格式
f = open(filename,'a');
f.write(txt);
f.write('\n')
f.close();


参考:

 http://www.cnblogs.com/fnng/p/3576154.html
http://cuiqingcai.com/990.html
代码地址
https://github.com/YoungFroever/qiushi

明天端午了,祝大家端午快乐(也就我自己了..).近半年没回过家今天晚上回去,想到回来之后跟高中上课般加班便头痛不已,还是先享受下三天的假期吧.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: