python-爬虫基础(正则表达式)

正则表达式符号与方法


符号.是一个占位符

import re
# .的使用举例
a = 'xy123'
b = re.findall('x.',a)
print b

输出:xy


符号*匹配前一个字符0次或无限次

#*的使用举例
a = 'xyxy123'
b = re.findall('x*',a)
print b

输出:['x', '', 'x', '', '', '', '', '']


符号?匹配前1个字符0次或1次

#?的使用举例
a = 'xy123'
b = re.findall('x?',a)
print b

输出:['x', '', '', '', '', '']


.:贪心算法
.
?:非贪心算法

# .*的使用举例
secret_code = 'hadkfalifexx|xxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
b = re.findall('xx.*xx',secret_code)
print b

输出:['xx|xxfasdjifja134xxlovexx23345sdfxxyouxx']

# .*?的使用举例
c = re.findall('xx.*?xx',secret_code)
print c

输出:['xx|xx', 'xxlovexx', 'xxyouxx']

# 使用括号与不使用括号的差别
# 返回()内的数据
d = re.findall('xx(.*?)xx',secret_code)
print d
for each in d:
    print each

�输出:['|', 'love', 'you']
|
love
you


. 无法处理换行符

s = '''sdfxxhello
xxfsdfxxworldxxasdf'''
d = re.findall('xx(.*?)xx',s)
print d

输出:['fsdf']

# re.S的作用使 . 包括\n
s = '''sdfxxhello
xxfsdfxxworldxxasdf'''
d = re.findall('xx(.*?)xx',s,re.S)
print d

输出:['hello\n', 'world']


对比findall与search的区别

s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(1)  #输出:I
#  f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(2)  #输出:love
print f

#finall
f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print f2[0][1]    #输出love

sub使用举例:


实战——制作文本爬虫

目标

目标网站右键打不开,换一个http://wiki.jikexueyuan.com/

极客学院Wiki

找到图片,右键检查


找到对应代码

在页面源代码搜索class="imgbox"


选择这一部分,源代码复制到source.txt

picdownloader.py

#!/usr/bin/python
#-*- coding:utf-8 -*-
import re
import requests

#读取源代码文件
f = open('source.txt','r')
html = f.read()
f.close()

#匹配图片网址
pic_url = re.findall('img src="(.*?)" alt=',html,re.S)
i = 0
for each in pic_url:
    print 'now downloading : ' + each
    pic = requests.get(each)
    fp = open('pic\\' + str(i) + '.jpg','wb')
    fp.write(pic.content)
    fp.close()
    i += 1
picdownloader.py运行效果
成功保存了图片

手工找到页面再下载显得有点low:修改代码使�其自动获取源代码
#!/usr/bin/python
#-- coding:utf-8 --
import re
import requests
import urllib2

#读取源代码文件
#f = open('source.txt','r')
url = 'http://wiki.jikexueyuan.com/'
response = urllib2.urlopen(url)
htmls = response.read()

#匹配图片网址    
#由于是下载整个页面,所以原来的正则表达式会匹配更多的内容
#所以采用先抓大再抓小,把范围缩小~
picsurl = re.findall('<div class="imgbox">(.*?) </div>',htmls,re.S) 
#findall返回的是一个列表,需要将列表再次弄成一个string,逐个写入一个txt
f = open('url.txt','wb')
for i in picsurl:
    f.write(i)
f.close()
ff = open('url.txt','r')
html = ff.read()
ff.close()
#这代码写得确实有点烂。。。。

pic_url = re.findall('img src="(.*?)" alt=',html,re.S)
i = 0
for each in pic_url:
    print 'now downloading : ' + each
    pic = requests.get(each)
    fp = open('pic\\' + str(i) + '.jpg','wb')
    fp.write(pic.content)
    fp.close()
    i += 1

效果同上


换个网站试试

【美空模特频道】
#!/usr/bin/python
#-*- coding:utf-8 -*-
import re
import requests
import urllib2

#读取源代码文件
url = 'http://www.moko.cc/channels/post/23/1.html'
response = urllib2.urlopen(url)
htmls = response.read()

#匹配图片网址
pic_url = re.findall('img src2="(.*?)" alt=',htmls,re.S)
i = 0
for each in pic_url:
    print 'now downloading : ' + each
    pic = requests.get(each)
    fp = open('picmoko\\' + str(i) + '.jpg','wb')
    fp.write(pic.content)
    fp.close()
    i += 1
jkxyclass Finder

把第一页的48张封面图给爬下来了~


实战——处理文本

准备下个电视剧,用mac的浏览器打开了一个页面

《血色星期一》(Bloody Monday)更新最终回-1280x720-外挂字幕-日语中字[HDTV]

然而mac没有装迅雷,都是用虚拟机里面的破解版迅雷下载的。
这个时候直接点页面就尴尬了,无法调用迅雷
右键看了看,页面源代码

view-source.www.ed2bt.com-japanese-drama-212838.html Google Chrome

发现ed2k链接都在里面,一看就可以用正则表达式处理一下,然后复制到虚拟机的迅雷里面创建任务

将部分页面源代码复制保存到test111.txt
# -*- coding:utf-8 -*-
#test111.py
__author__ = 'jerry'
import re

f = open('test111.txt','r')
html = f.read()
f.close()

web = re.findall('href="(.*?)">',html,re.S)
i=0

while i<13:
    print web[i]
    i+=1
输出结果

复制到虚拟机的迅雷里面创建任务



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容