鱼C论坛

 找回密码
 立即注册
查看: 16397|回复: 157

[作品展示] 正则初探,简单爬虫。

  [复制链接]
发表于 2014-11-19 18:10:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wei_Y 于 2016-7-27 13:04 编辑

刚学习了正则,有点晕啊,各种符号好乱。。



1. 模块。
python中的正则模块是re模块。
import re
匹配。



re.match()
从第一个字符开始匹配,如果不是则返回None,否则返一个Match Object。
360截图20141119161243228.jpg

搜索。
re.search()
这个和find差不多。不过这个更强大。
360截图20141119161606875.jpg

查找。
re.findall()
查找所有符合条件的字符串。
360截图20141119161908665.jpg


以上三个都有一个可选参数。
re.I   忽略大小写
re.M 多行匹配。
re.S  使'.'也会匹配到换行符。
re.U 匹配Unicode字符
re.X 忽略其中空格。
360截图20141119162145328.jpg

编译:
这个不大会解释。

如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配。
re.compile()


2.符号。
上面只是些字符串,符号才是正则。




'.'                                匹配除换行符外的任意单个字符。
'*'                               匹配位于*之前的任意个字符。
'+'                              匹配位于+之前的1个或多个字符。
'|'                                匹配前后的任意一个。
'^'                               匹配开头,
'$'                                匹配结尾。
'?'                                匹配位于?之前的0个或1个。
'\'                                转义
'[]'                               不是列表,匹配位于[]中的任意一个字符。
'()'                               不是元组,将位于()里的作为一个整体匹配。
'{}'                               不是字典,限制匹配的次数。
下面的貌似是转义后的。
'\d'                              任意数字。
'\w'                              任意字母或数字。
'\s'                               空格。
多个符号可以组合使用。
比如[a-zA-z]{3}
结合编译。
360截图20141119163513195.jpg

你说他为什么匹配到两个fis,这要看我们写的了。a-zA-z就是全部字母了,F-s匹配了3次。开始下一次匹配,但是hc之后是空格。所以......

原谅我举不出更多例子了,,自己折腾咯~。


3.天梯!
当你连胜好多局之后,下一次的匹配就会遇到一个高出不知道多少个等级的人出来,然后就木有然后了。。
3.1 贪婪模式。
默认的是贪婪模式,意思就是尽可能多的匹配。
我写的时候就直接  .*+的往上仍,结果想要的信息和没用的信息一起都提取出来了。不爽。
但是确实符合条件,着实蛋疼。。
3.2 非贪婪模式。
好像就是写完之后加上 ?



4.简单爬虫。
我这里是3.4.1的,可能有些不一样。

思路:
打开目标网址,读出相应的html,匹配到想要获取的内容,下载到本地。
First:
先把模块们加载上。
import re
import os
import urllib.request as urllib
首先创建一个文件夹(可跳过此项。)
try:
        os.mkdir(r'D:\pic')
        os.chdir(r'D:\pic')
except:
        os.chdir(r'D:\pic')
我就创建在D盘了。

先打开网址分析一下。
正好点开360笑话了
http://xiaohua.hao.360.cn/tj?id=51906
url = urllib.urlopen('http://xiaohua.hao.360.cn/tj?id=51906')
urls = url.read().decode('utf-8')
写在一个里也可以,有的网站不止utf-8的,自动获取的还不大会,手动看源码就可以了。
360截图20141119175007908.jpg   我们要获取的是那个jpg的网址。

OK,我们要开始正则了。
为了比较全还是从src开始
r'src=""'
之后的网址我们要作为一个整体去匹配。反正最后是.jpg就对了。
r'src="(\.jpg)"'
中间奇奇葩葩的各类字母数字特殊符号就交给  .*+吧。后面的结束还是把 class写上。
r'src="(.*\.jpg)" class'
rep = r'src="(.*\.jpg)" class'
html = re.compile(rep)
find = re.findall(html,urls)
迭代出看一下效果。
360截图20141119175819896.jpg

最后将这些下载到本地。
for i,t in zip(find,range(len(find))):
        urllib.urlretrieve(i,'%d.jpg'%(t))
360截图20141119175951160.jpg


4.1 非贪婪模式下的爬取。
有些情况类似使用
r'src="(.*\.jpg)" class'的达不到效果,比如逗比妹子,不是- -,豆瓣妹子。
360截图20141119180252509.jpg

改一下的情况是 r'src="(.*\.jpg)" data'
我们迭代出来
360截图20141119180336766.jpg

所以要使用非贪婪模式
r'src="(.*?\.jpg)"'  具体的网页还要分析一下,我这正则不熟练,写的渣,只图达到目的。

360截图20141119180626654.jpg


大家有更牛掰的方法要教我哦~

嗯~这张还不错。
7.jpg

游客,如果您要查看本帖隐藏内容请回复






评分

参与人数 3荣誉 +18 鱼币 +18 贡献 +6 收起 理由
不二如是 + 5 + 5 + 1 sublime text?
小甲鱼 + 8 + 8 + 5 这图不错~~~
bevin + 5 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 18:35:51 | 显示全部楼层
支持  ,正则太实用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-19 18:56:47 | 显示全部楼层
好看:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 19:15:48 | 显示全部楼层
不错呀!!!!楼主好样的!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-19 19:17:14 | 显示全部楼层
:lol::lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 19:18:38 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 19:23:06 | 显示全部楼层
正则我略懂略懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-19 19:47:49 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-19 20:45:14 From FishC Mobile | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-20 08:47:17 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-20 09:31:59 | 显示全部楼层
写得好详细!正好学习!感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-20 09:39:57 | 显示全部楼层
为了最后那张图,回复一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-21 11:57:51 | 显示全部楼层
谢谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-21 14:15:14 | 显示全部楼层
感谢LZ 的付出~~支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-21 15:33:46 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-21 16:16:50 | 显示全部楼层
图片不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-21 16:59:05 | 显示全部楼层
谢谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-22 11:09:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-23 20:55:04 | 显示全部楼层
不错,支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-24 16:08:17 | 显示全部楼层
呵呵   谢谢了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表