爬虫学习2
2015-09-15 17:00
239 查看
接上一次预告
本次
我们现在打开网页了
要抓取图片了,这里将涉及正则表达式,和rfind
我并没有了解如何存储到特定位置。
相关知识:
rfind()函数:
rfind(…)
S.rfind(sub [,start [,end]]) -> int
Return the highest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
正则表达式:
在学习过程中一直不理解且难以找到如下问题的答案
其实是是否转义导致的,我是从这里了解的
Python编译器用‘\’(反斜杠)来表示字符串常量中的转义字符。
如果反斜杠后面跟着一串编译器能够识别的特殊字符,那么整个转义序列将被替换成对应的特殊字符(例如,‘\n’将被编译器替换成换行符)。
但这给在Python中使用正则表达式带来了一个问题,因为在‘re’模块中也使用反斜杠来转义正则表达式中的特殊字符(比如*和+)。
这两种方式的混合意味着有时候你不得不转义转义字符本身(当特殊字符能同时被Python和正则表达式的编译器识别的时候),但在其他时候你不必这么做(如果特殊字符只能被Python编译器识别)。
与其将我们的心思放在去弄懂到底需要多少个反斜杠,我们可以使用原始字符串来替代。
原始类型字符串可以简单的通过在普通字符串的双引号前面加一个字符‘r’来创建。当一个字符串是原始类型时,Python编译器不会对其尝试做任何的替换。本质上来讲,你在告诉编译器完全不要去干涉你的字符串。
下一话会尝试爬取一个网页和与之相关的网页,达到爬取整个网站的效果。
本次
抓取页面上的特定图片
我们上一话学会了打开页面与保存文件# -*- coding: UTF-8 -*- import urllib2 import sys import re baseurl='某知名种子发布网站.html' response= urllib2.urlopen(baseurl) i=0 html = response.read()
我们现在打开网页了
要抓取图片了,这里将涉及正则表达式,和rfind
for url in re.findall(r'<img src=["](http://pics.+?)["].+?',html): print url print type(url) pic = urllib2.urlopen(url).read() with open(url[url.rfind('/')+1:],'wb') as f: f.write(pic)
我并没有了解如何存储到特定位置。
相关知识:
rfind()函数:
rfind(…)
S.rfind(sub [,start [,end]]) -> int
Return the highest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
正则表达式:
在学习过程中一直不理解且难以找到如下问题的答案
re.findall(r'blablabla',string)#我疑惑于的就是括号里的r
其实是是否转义导致的,我是从这里了解的
Python编译器用‘\’(反斜杠)来表示字符串常量中的转义字符。
如果反斜杠后面跟着一串编译器能够识别的特殊字符,那么整个转义序列将被替换成对应的特殊字符(例如,‘\n’将被编译器替换成换行符)。
但这给在Python中使用正则表达式带来了一个问题,因为在‘re’模块中也使用反斜杠来转义正则表达式中的特殊字符(比如*和+)。
这两种方式的混合意味着有时候你不得不转义转义字符本身(当特殊字符能同时被Python和正则表达式的编译器识别的时候),但在其他时候你不必这么做(如果特殊字符只能被Python编译器识别)。
与其将我们的心思放在去弄懂到底需要多少个反斜杠,我们可以使用原始字符串来替代。
原始类型字符串可以简单的通过在普通字符串的双引号前面加一个字符‘r’来创建。当一个字符串是原始类型时,Python编译器不会对其尝试做任何的替换。本质上来讲,你在告诉编译器完全不要去干涉你的字符串。
下一话会尝试爬取一个网页和与之相关的网页,达到爬取整个网站的效果。
相关文章推荐
- 为什么淘宝、腾讯需要大量顶尖高手来开发网站?
- 如何看懂Code128条形码
- Android(java)学习笔记255:JNI之JNI概念
- hdu5422 最大表示法+KMP
- js+flash实现,单击按钮复制文本框内容
- Can't connect to local MYSQL server through socket /var/lib/mysql/mysql.sock
- Codevs 1014 装箱问题
- android仿ios时间控件
- mvc:annotation-driven与context:annotation-config -- AnnotationDrivenBeanDefinitionParser
- 欢迎使用CSDN-markdown编辑器
- linux下查看已经安装的jdk 并卸载jdk
- iOS开发之 滚动视图 + 页面控件(UIScrollView + UIPageControl)
- 学习Linux第二天
- 运维工程师的职责和前景
- SQL SERVER 截取字符串常用函数
- java+android须知环境变量配置
- Android 多分辨率自适应总结
- iphone程序中实现截屏的一种方法
- 一个很详细的web.xml讲解
- 判断一个字符是否是另一个字符的旋转字符串