第一次用python3爬虫图片_Python3写爬虫(二)爬取页面图片

#!/bin/python3

import urllib.request as request

import urllib.parse as parse

import string

import re

import os

import urllib.error as error

print("""

++++++++++++++++++++++

*++++网站图片捕捉中+++

+++++++++++++++++=++++

""")

def baidu_tieba(url, begin_page, end_page):

count = 1

for i in range(begin_page, end_page + 1):

sName = 'f:/test/'+str(i).zfill(5)+'.html'

print('正在下载第'+str(i)+'个页面, 并保存为'+sName)

m = request.urlopen(url+str(i)).read()

#创建目录保存每个网页上的图片

dirpath = 'f:/test/'

dirname = str(i)

new_path = os.path.join(dirpath, dirname)

if not os.path.isdir(new_path):

os.makedirs(new_path)

page_data = m.decode('UTF-8','ignore')

#关于decode和encode,Python中编码的解码与编码会详细介绍

page_image = re.compile('%5C%22(.+?)%5C%22')

for image in page_image.findall(page_data): #在page_date中查找所有含有IMG标签的字符串

pattern = re.compile(r'^http://.*.jpg$')

if pattern.match(image): #如果在含有IMG标签包含图片链接,则下载

try:

image_data = request.urlopen(image).read()

image_path = dirpath + dirname +'/'+str(count)+'.jpg'

count += 1

print(image_path)

with open(image_path, 'wb') as image_file:

image_file.write(image_data)

image_file.close()

except error.URLError as e:

print('Download failed')

with open(sName,'wb') as file:

file.write(m)

file.close()

if __name__ == "__main__":

url = 'http://tieba.baidu.com'

begin_page = 1

end_page = 3

baidu_tieba(url, begin_page, end_page)

其中创建文件夹等部分不赘述,重点讲解下Python中re模块(正则表达式模块的内容),也就是下面两句:

page_image = re.compile('%5C%22(.+?)%5C%22')

page_image.findall(page_data):

re.compile()可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:

import re

text = " JGood is a handsome boy, he is cool, clever, and so on... " regex = re.compile(r ' \w*oo\w* ' )print regex.findall(text) # 查找所有包含'oo'的单词 print regex.sub( lambda m: ' [ ' + m.group(0) + ' ] ' , text) # 将字符串中含有'oo'的单词用[]括起来。

其中相关到正则表达式,可参考这个教程《正则表达式30分钟入门教程》(网址:http://www.jb51.net/tools/zhengze.html)

这段正则表达式的含义是:%5C%22(.+?)%5C%22%EF%BC%8C%E5%8C%85%E5%90%AB%E4%BA%86<img

'^http://.*.jpg$'该正则表达式:^表示字符串的开始,$表示字符串的结束,整个式子表示所有图片的链接。

所以,改程序最主要的内容就是在读取的网页中检索图片的链接字符串。具体步骤如下:

----------------------------------------------华丽分割-------------------------------------------------

第一步,抓取网页内容:

m = request.urlopen(url+str(i)).read()

page_data = m.decode('UTF-8','ignore')

第二部,筛选IMG标签:

page_image = re.compile('%5C%22(.+?)%5C%22')

page_image.findall(page_data)

第三部,在筛选出的IMG标签中,检索图片链接:

pattern = re.compile(r'^http://.*.jpg$')

if pattern.match(image):

#后面的语句

如果在含有IMG标签包含图片链接,则下载

--------------------------------------------华丽结束---------------------------------------------------

关于图片数据的保存,不赘述。

由此可知,完成网页爬虫需要学习的Python模块,是:

1.urllib.request

2.urllib.parse

3.re

其中Python os模块包含普遍的操作系统功能,其主要作用就是能够使程序与平台无关。(详见《Python 模块学习:os模块》)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值