zoukankan      html  css  js  c++  java
  • 03-python进阶-爬虫入门-正则

    【urllib and urllib2】

    这是两个python的网络模块 内置的 提供很好的网络访问的功能。

    #!coding:utf-8
    import  urllib2
    res = urllib2.urlopen('http://www.baidu.com')
    html = res.read()
    print(html)

    如果我们想要去爬一些图片可以这样干

    #!/usr/bin/env python
    #conding:utf-8
    import urllib ,  urllib2
    
    url = "https://www.douban.com/doulist/121326/"
    
    header = {'User-Agent':'moto x'}
    req = urllib2.Request(url,headers = header)
    
    response = urllib2.urlopen(req)
    
    data = response.read()
    
    import re
    #print data
    p =re.compile(ur'<img.+src="(.*?)"')
    
    matches = re.findall(p,data)
    
    print matches
    
    for  m in matches:
        with file(m.split('/')[-1],'w') as f:
            f.write(urllib2.urlopen(m).read())

    可以把豆瓣某个电影页面的封面都爬下来 并且以文件名的形式保存下来

    【正则表达式】

    在python中想要用正则表达式就必须要要用re模块

    <html><body><h1>hello world<h1></body></html>

    比如我们想从这里提取helloword

    #coding:utf-8
    import re
    
    key = r"<html><body><h1>hello world<h1></body></html>"
    p1 = r"<h1>.+<h1>"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

         首先我们知道  . 代表的任意单个字符 而且 + 呢 则代表的是 前面的模拟出现任意次

         那么如果我们想就想匹配 . 

        比如我们要匹配   213d3421a.qq.com123123

        里面的a.qq.com

    key = r"213d3421a.qq.com123123"
    p1 = r"a.qq.com"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

    我们通过 ‘’ 来转义 将 【. 】 从任意单个字符转义成它原本的意思

    个人理解:我们在学习正则表达式的时候 应该把正则表达式分成 表达式语句 和 修饰语句 两部分来看 这样就会容易很多

    就比方我们看过的例子

    #coding:utf-8
    import re
    
    key = r"<html><body><h1>hello world<h1></body></html>"
    p1 = r"<h1>.+<h1>"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

     我们可以理解为 . 就是代表表达式 而+ 代表的是修饰符 .代表的任意单个字符 而+则是出现任意此 那么.+的意思就是任意字符出现任意次

    #conding:utf-8
    import re
    
    key = r"abb adb abbb a abcd"
    p1 = r"ab*"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

    我们看这段代码 能匹配到那些呢

    *代表的是他前面的字符出现任意次 那么 这里的表达式就是*前面的字符 而修饰语言就是* 

    这里能被匹配道的是

    ['abb', 'a', 'abbb', 'a', 'ab']

  • 相关阅读:
    tomcat7配置
    C# FTP常规方法
    C++ 用libcurl库进行http通讯网络编程
    webkit webApp 开发技术要点总结[转]
    websocket
    Linux下使用logrotate实现日志切换
    Linux日志文件utmp、wtmp、lastlog、messages
    妙用git rebase --onto指令
    iptables命令详解和举例
    linux下IPTABLES配置详解
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/7117822.html
Copyright © 2011-2022 走看看