python使用正则表达式编写网页小爬虫


"""

文本处理是当下计算机处理的主要任务,从文本中找到某些有用的信息,

挖掘出某些信息是现在计算机程序大部分所做的工作。而python这中轻量型、小巧的语言包含了很多处理的函数库,

这些库的跨平台性能很好,可移植性能很强。

在Python中re模块提供了很多高级文本模式匹配的功能,以及相应的搜索替换对应字符串的功能。

"""

 

"""

正则表达式符号和特殊字符

re1|re2 -----> 匹配正则表达式的re1或者re2

. -----> 可以匹配任何字符,但是除了换行符之外

^ -----> 匹配字符创的开始 ^Dear

$ -----> 匹配字符串的结尾 /bin/*sh$

* -----> 匹配前面出现的正则表达式零次或者多次 [A-Za-z0-9]*

+ -----> 匹配前面出现的正则表达式一次或者多次 [A-Za-z0-9]+ [a-z]+\.com

? -----> 匹配前面出现的正则表达式零次或者一次 goo?

{N} -----> 匹配前面出现的正则表达式N次 [0-9]{N}

{M,N} -----> 匹配重复出现M次到N次的正则表达式 [0-9]{3,5}

[...] -----> 匹配字符组中出现的任意一个字符 [aeiou]

[...x-y...]-----> 匹配从字符x到y中的任意一个字符 [0-9],[A-Za-z]

[^...] -----> 不匹配此字符集中出现的任何一个字符,包括某个范围的字符 [^A-Za-z0-9_]

(*|+|?|{})? -----> 用于上面出现的任何"非贪婪版本"重复匹配的次数符号 .*?[a-z]

(...) -----> 匹配封闭括号中正则表达式(RE),并保存为字数组 ([0-9]{3})?,f(oo|u)bar

"""

 

 

import re
p=re.compile('ab*');
print p;
r1=r'\d{3,4}-?\d{8}';
print re.findall(r1,'010-12345678');
print re.findall(r1,'010-00000000');
r2=re.compile(r'[Cc][Ss][Vv][Tt]');
r3=re.compile(r'csvt',re.I);
print r3.findall('cSvT');
test_r=r'(abc/[0-9]{8,8}$)';
print re.findall(test_r,'abc/12345678');

 

"""

使用正则表达式进行一个网页爬虫

"""


 

headers={
    'Connection': 'Keep-Alive',
    'Accept': 'text/html, application/xhtml+xml, */*',
    'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
};

import urllib2

url='http://blog.csdn.net/berguiliu';

req=urllib2.Request(url);
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko');
Browser=urllib2.urlopen(req);
data = Browser.read();

re_blog_list=re.compile(r'href="(/berguiliu/article/details/[0-9]{8,8})">');
url_list=re.findall(re_blog_list,data);

import cookielib

def makeMyOpener(head):
    cj=cookielib.CookieJar();
    opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));    
    header=[]
    for key, value in head.items():
        elem=(key, value)
        header.append(elem)
    opener.addheaders=header;
    return opener
  
oper = makeMyOpener(headers);
uop = oper.open('http://www.baidu.com/', timeout = 1000);
data = uop.read();
print data;

import time;
for subUrl in url_list:
    new_Url='http://blog.csdn.net'+subUrl;
    print new_Url;
    oper = makeMyOpener(headers);
    uop = oper.open(new_Url, timeout = 1000);
    data = uop.read();
    time.sleep(3)

这个程序主要是通过抓取网页,分析一下网页信息,找到自己感兴趣的部分, 就可以找到其对应的信息,进行相应的操作!

 

 

 

评论关闭