网络搜索引擎-正则表达式

正则表达式

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

关于贪婪和非贪婪

简单解释
http://www.runoob.com/regexp/regexp-syntax.html

re模块
  • re.findall() 在目标字符串查找符合规则的字符串
  • re.sub() 替换
  • re.compile 把正则表达式编译成一个正则对象
e.g. 1

利用正则表达式抓取页面内容
注意python3的解码问题
这里写图片描述

import requests
import re

url = 'http://book.douban.com/series/1163?page=11'
re_extract = re.compile('<a href="(.*?)" title="(.*?)"[\S\s]*?class="pub">([\S\s]*?)<\/div>')
page = requests.get(url)
item_match = re.findall(re_extract, page.content.decode())
if item_match:
    for item_info in item_match:
        #print (item_info)
        print (item_info[0])
        print (item_info[1])
        print (item_info[2].strip(), '\n')
e.g. 2

一个正则调试工具:

正则调试工具

  • .*? 一般用于(?)在两个确定表达式之间表示
  • ( ) 中的表达式作为分组,每遇到一个编号+1
  • 避免在样式里面提取,在属性里提取
  • html转义(eg. ‘&nbsp’) 和 正则转义 的不同
import re
import requests

url = 'http://www.mtime.com/hotest'
page = requests.get(url)
re_extract = re.compile('<div class="picbox">.*?<img src="(.*?)".*?<a href="(.*?)" target="_blank">(.*?)</a>.*?导演:\s*(.*?)</li>.*?主演:\s*(.*?)</li>.*?</div>')
item_match = re.findall(re_extract, page.content.decode())
if item_match:
    for info_list in item_match[:3]:
        for item_info in info_list:
            item_info_r = re.sub('\s*<\/?a.*?>\s*', '', item_info)
            item_info_r = re.sub('\s+', ' ', item_info_r)
            print (item_info_r.replace('&nbsp;', ' '))
        print ('\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值