码迷,mamicode.com
首页 > 其他好文 > 详细

Mooc爬虫04-正则表达式

时间:2017-04-13 20:58:35      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:字符   print   元素   1.3   title   正则表达   inf   continue   mooc   

1 正则表达式

  在Python中正则表达式库需要导入re库

import re

  正则表达式需要使用原生字符串来表达, 原生字符串(raw shtring)在普通的字符串前面加 r 表示

1.1 正则表达式的主要功能函数

  技术分享

  search(pattern, string, flags=0)

  search用于在字符串中搜索, 并且返回第一个位置的match对象

    pattern: 正则表达式字符串

    string: 待匹配的字符串

    flags: 控制标记

      re.I 忽略大小写

      re.M ^能够将每行当做匹配的开始

      re.S .能够匹配所有字符 (正常.只能匹配出换行以外的所有)

  match(pattern, string, flahs=0)

    从字符串开始匹配,是匹配, 如果不匹配的话就返回None, 匹配返回match对象

    三个参数与search()相同

  findall(pattern, string, flahs=0)

    与search()不同, findall()会查找到所有满足匹配的, 且返回匹配的字符串形成的列表

    三个参数与search()相同

  split(pattern, string, maxsplit=0, flags=0)

    是根据正则表达式来分割字符串, 形成一个列表返回

    相同三个参数用法不变

    maxsplit: 是最大分割数, 超过之后会吧剩余的作为一个元素输出

  finditer(pattern, string, flahs=0)

    功能与findall()一致, 只是返回迭代器内含match对象

    三个参数与search()相同

  sub(pattern, repl, string, count, flahs=0)

    将匹配成功的字符串替换成repl

    相同三个参数用法不变

    repl: 替换成的字符串

    count: 最大替换次数

  主要, re库的等价形式:

>>> rst = re.search(r[1‐9]\d{5}, BIT 100081)

    等同于

>>> pat = re.compile(r[1‐9]\d{5})
>>> rst = pat.search(BIT 100081)

  如果利用compile()方法的话, 上述的方法就少写第一个参数

1.2 Match对象的介绍

  Match有以下属性

    技术分享

  Match对象的方法 

    技术分享

1.3 贪婪匹配

  在默认的情况下, Python的正则匹配是贪婪匹配, 但是也有用的到最少匹配的情况, 此时需要使用?来标识

  具体形式如下

    技术分享

2 淘宝商品价格的爬取

  通过正则表达式匹配淘宝网页, 来获取商品价格和商品名称

  具体代码如下

import requests
import re


def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


def parsePage(ilt, html):
    try:
        plt = re.findall(r‘\"view_price\"\:\"[\d\.]*\"‘, html)
        tlt = re.findall(r‘\"raw_title\"\:\".*?\"‘, html)
        for i in range(len(plt)):
            price = eval(plt[i].split(‘:‘)[1])
            title = eval(tlt[i].split(‘:‘)[1])
            ilt.append([price, title])
    except:
        print("")


def printGoodsList(ilt):
    tplt = "{:4}\t{:8}\t{:16}"
    print(tplt.format("序号", "价格", "商品名称"))
    count = 0
    for g in ilt:
        count = count + 1
        print(tplt.format(count, g[0], g[1]))


def main():
    goods = ‘书包‘
    depth = 3
    start_url = ‘https://s.taobao.com/search?q=‘ + goods
    infoList = []
    for i in range(depth):
        try:
            url = start_url + ‘&s=‘ + str(44 * i)
            html = getHTMLText(url)
            parsePage(infoList, html)
        except:
            continue
    printGoodsList(infoList)


main()

  

Mooc爬虫04-正则表达式

标签:字符   print   元素   1.3   title   正则表达   inf   continue   mooc   

原文地址:http://www.cnblogs.com/weihuchao/p/6705898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!