文档章节

【正则表达式】使用多行的正则表达式匹配多行的网页数据

Master_Li
 Master_Li
发布于 2017/03/10 13:28
字数 475
阅读 229
收藏 0

        对于正则表达式的语法,这里不做详解。只是提一下学习正则表达式时,只需要了解元字符表示的意义、编译函数和编译标志、re模块包含的顶级方法和matchobject的实例方法即可。

目标:

    从指定页面抓到的数据中提取目标数据,这里要提取的就是代理服务器的ip和端口

注意:这里使用的是多行的正则表达式,当然可以使用re.X标志进行编译,但是由于html对空白字符要求不严格,所以经常出现页面对齐格式不良好,为了解决这一问题,相比其他正则表达式,改进之处在于对html页面的每一行都在其行头和行尾加上[\s]*来匹配无效的空白字符。关于这一细节,还需提醒一点的是并不能直接拿页面的内容作为正则表达式,特别是要匹配的内容是多行的时候。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import urllib2
import re

'''
    http请求体的内容格式如下:
    <div class="proxylistitem" name="list_proxy_ip">
            <div style="float:left; display:block; width:630px;">
            <span class="tbBottomLine" style="width:140px;">
                66.104.77.20
            </span>
            <span class="tbBottomLine" style="width:50px;">
                    3128
            </span>
            <span class="tbBottomLine " style="width:70px;">
                高匿
            </span>
            <span class="tbBottomLine " style="width:70px;">
                美国
            </span>
            <span class="tbBottomLine " style="width:80px;">
                09月05日
            </span>
            <span class="tbBottomLine " style="width:80px;">
                2.70(61票)
            </span>
            <span class="tbBottomLine " style="width:60px;">
                2.70
            </span>
            <span class="tbBottomLine " style="width:30px;">
                10天
            </span>
            </div>
        </div>
    目标页面:
    http://www.proxy360.cn/Region/America
'''

def get_proxy_from_cnproxy():
    reStr = '<span class="tbBottomLine" style="width:140px;">[\s]*\
            [\s]*(.+?)[\s]*\
            [\s]*</span>[\s]*\
            [\s]*<span class="tbBottomLine" style="width:50px;">[\s]*\
            [\s]*(.+?)[\s]*\
            [\s]*</span>'
    req_reObj = re.compile(reStr)
    target = r'http://www.proxy360.cn/Region/America'
    seq_page = urllib2.urlopen(target)
    seq_page_html = seq_page.read()
    proxy_address = req_reObj.findall(seq_page_html)
    for address in proxy_address:
        print address

 

© 著作权归作者所有

Master_Li
粉丝 1
博文 74
码字总数 57794
作品 0
南京
程序员
私信 提问
logstash之codec插件

Logstash不只是一个的数据流,而是一个的数据流。codec就是用来decode,encode 事件的。所以codec常用在input和output中 常用的codec插件有plain,json,multiline等 plain插件: 主要用于事...

余二五
2017/11/23
0
0
grep命令

1.grep命令 grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。 2.用法及选...

LavenDer7n
2017/11/21
0
0
Python爬虫入门,如何使用正则表达式

按照之前的课程安排,此次课程应该讲python基础第十六讲爬虫,但是如果正则一笔带过大家可能还是没办法写出自己想要实现的结果,所以把正则匹配详解提前学习一下,此次课程的学习路线会翻译官...

程序员补给栈
01/28
29
0
Oracle 查询不区分大小写 (正则函数)

//不区分大小写查询REGEXPLIKE(字段名, '(" + keyword+ ")', 'i') " ); Oracle中的Like操作符使用''和'%'作为通配符,使用就像这样: SELECT name FROM testlike WHERE name like 'a%'; 即匹......

-wangming-
2016/04/18
454
0
JavaScript正则表达式进阶指南

摘要: 正则表达式是程序员的必备技能,想不想多学几招呢? 本文用JavaScript的exec方法来测试正则表达式。 例如,正则表达式/F.*g/会匹配“以F开头,以g结尾的字符串”,因此可以匹配"Hell...

Fundebug
2018/05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
42分钟前
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
44分钟前
5
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部