一、正则表达式的应用举例

1

#-*-coding:utf8-*-

#导入re库文件
import re

f = open('text.txt','r')     # text.txt文件与当前.py文件在同一路径下
html = f.read()
f.close()

#爬取网页标题
# 在确定只有一个内容时,使用search方法,可提高效率
title = re.search('<title>(.*?)</title>',html,re.S).group(1)
print title

输出:

极客学院爬虫测试


2

#-*-coding:utf8-*-

#导入re库文件
import re

f = open('text.txt','r')
html = f.read()
f.close()

#爬取链接
links = re.findall('href="(.*?)"',re.S)
for each in links:
    print each

输出:

http://jikexueyuan.com/welcome.html
http://jikexueyuan.com/1.html
http://jikexueyuan.com/2.html
http://jikexueyuan.com/3.html


3

#-*-coding:utf8-*-

#导入re库文件
import re

f = open('text.txt','r')
html = f.read()
f.close()

#抓取部分文字,先大再小技巧
text_fied = re.findall('<ul>(.*?)</ul>',re.S)[0]
the_text = re.findall('">(.*?)</a>',text_fied,re.S)
for every_text in the_text:
    print every_text

输出:

这是第一条
这是第二条
这是第三条


4

#-*-coding:utf8-*-

#导入re库文件
import re

old_url = 'http://www.jikexueyuan.com/course/android/?pageNum=2'
total_page = 5

#sub实现翻页
for i in range(2,total_page+1):   # 左闭右开
    new_link = re.sub('pageNum=\d+','pageNum=%d'%i,old_url,re.S)
    print new_link

输出:

http://www.jikexueyuan.com/course/android/?pageNum=2
http://www.jikexueyuan.com/course/android/?pageNum=3
http://www.jikexueyuan.com/course/android/?pageNum=4
http://www.jikexueyuan.com/course/android/?pageNum=5



二、实战——制作文本爬虫

1 目标网站:

http://blog.csdn.net/column.html


2 目标内容:

图片

3 实现原理:

3.1 保存网页源代码

目前,还没有涉及到使用Python程序获取网页源代码,但是可以手动获取,因此这种文本爬虫方式又称为半自动爬虫人肉爬虫

1' 右击网站页面,点击“查看源代码”跳出该网页源代码(view-source:http://blog.csdn.net/column.html);

2' 对于代码量大的源程序,可回到目标网站,右击页面,点击“审查元素”,再点击弹出窗口的左上角的放大镜图标,选择目标图片,则自动定位到相应代码位置;

3' 在目标图片标签内,给出了图片网址,以及class="column_logo"信息作为寻找标记;


4' 切换到源代码页面,搜索关键字class="column_logo",可查看到该网页的所有图片对应的网址及其他信息;


5' 本着先大后小的原则,不是复制全部源代码,只需复制涉及到相关信息的源代码,以文本文件格式保存在与.py文件同一路径下;


3.2 Python读文件加载源代码

3.3 正则表达式提取图片网址

3.4 下载图片

#-*-coding:utf8-*-

#导入re库文件
import re
import requests  # python获取网页文件的利器,这里用以保存图片

f = open('text.txt','r')
html = f.read()
f.close()

pic_url=re.findall('src="(.*?)" class="column_logo"',re.S)
i=0
for each in pic_url:
    print 'Now downloading:'+each
    pic=requests.get(each)              # 下载图片
    fp=open('pic\\'+str(i)+'.jpg','wb') # 图片保存在pic文件夹下
    fp.write(pic.content)
    fp.close()
    i+=1

正则表达式续的更多相关文章

  1. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  3. Xcode:将WorkspaceSettings.xcsettings添加到源代码管理中

    在Xcode中,更改文件>中的设置.工作区设置…

  4. 在iOS模拟器中查看源代码?

    有没有人知道我可以在Apple的iOS模拟器中检查网站源代码的工具?像Firebug或Chrome开发者工具这样的东西会很棒,我还没有找到任何东西.解决方法之前的旧答案已被删除,因为它们包含过时的信息.至少使用Xcode4和Safari6,在iPhone模拟器中打开Web视图,然后切换到桌面Safari.在Safari的“开发”菜单中,您将找到“iPad模拟器”菜单,该菜单允许您为模拟器中打开的页面打开SafariWebInspector!

  5. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  6. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

  7. ios – 如何在Xcode中创建机器人?获取“创建机器人需要一个受源代码控制的项目”.

    ]单击取消或配置遥控器会打开我的文件夹的配置,我看到我的遥控器添加得很好.我还尝试使用不同的名称再次添加远程存储库.我该如何前进?解决方法似乎这个问题发生在没有名为“origin”的远程时,因为这就是Xcode正在寻找的东西.当我将我的遥控器重命名为原点时,Xcode停止了抱怨,让我通过XcodeUI添加机器人.

  8. ios – 如何在Xcode中调试插件源代码?

    我是新手为AppleMail应用程序创建插件,我想为OSX创建AppleMail插件.我在Xcode中的“InstallerPlug-in”下创建了一个项目,但是我不能像简单的iOS应用程序一样调试该项目.可能吗?如果可能的话请帮助我.解决方法我找到了这个问题的解决方案.只需按照Xcode中的插件代码调试步骤操作即可.步骤1=转到Xcode中的编辑方案,然后转到Editscheme=>.步骤2=从侧窗口选择运行和信息选项卡,然后从下拉列表中选择可执行应用程序保持你的应用程序运行ant尝试调试你的插件源代码

  9. ios – 检查“NeXT / Apple typedstream”版本4(NSArchiver)类型的文件

    对于数据恢复程序,我需要能够从NSArchiver编写的文件中提取值类型,而无需访问Apple的CF/NS框架.OSXfile命令报告以下文件:是否有关于如何编码这些文件的文档,或者是否有人提出可以解析它们的代码?

  10. Xcode中的单个.swift文件是否可以包含iOS应用程序的完整源代码?

    换句话说,Xcode中的Swift代码可以像在Playground文件中那样运行吗?

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部