您的位置:首页 > 其它

爬虫学习2

2015-09-15 17:00 239 查看
接上一次预告

本次

抓取页面上的特定图片

我们上一话学会了打开页面与保存文件

# -*- 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编译器不会对其尝试做任何的替换。本质上来讲,你在告诉编译器完全不要去干涉你的字符串。

下一话会尝试爬取一个网页和与之相关的网页,达到爬取整个网站的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: