python爬取网页图片信息

引言

记录一点昨天现学现卖爬取以太妖怪的代码,以前觉得爬虫很复杂,现在再想,还是挺简单的。
思路很清新,主要就是读取网页信息将网页代码全部拿出来,然后用正则表达式去匹配自己想要的内容。 然后把需要的保存到本地即可。
稍微复杂一点的可能是中文编码问题,比如爬下来的名字乱码,需要写个函数重新转换一下。 (这个编码转换网上也能找到很多源码)
还有点问题的是,有的网站稍微限制爬虫,所以我们爬取时可能需要伪装成chrome或者firefox浏览器, 这个也很容易实现。 不过这个网页没有这个问题。
最后一个问题是,动态网站和静态网站的问题,需要模拟登录, 这个上学期帮一个同学做一键评测脚本时遇到过。 也可以解决。 这里网站一部分数据是静态,另一部分数据是动态,需要登录才能爬取。。 有时间再尝试爬去动态部分。。

源码共享

以下是源码信息,主要是爬取网站所有神兽图片保存本地,同时以图片名的方式保存神兽归属人信息和神兽编号。当然也把信息print出来了。
这里作者将网站xxxx掉了。防止不必要问题。

# encoding: utf-8
# author: Yanng
# Link: http://yanng.cc/
import urllib # 导入urllib模块
import re # 导入re模块
import sys
reload(sys)
sys.setdefaultencoding("utf8")
# 转中文格式
def translate(str):
line = str.strip().decode('utf-8', 'ignore') # 处理前进行相关的处理,包括转换成Unicode等
p2 = re.compile(ur'[^\u4e00-\u9fa5]') # 中文的编码范围是:\u4e00到\u9fa5
zh = " ".join(p2.split(line)).strip()
zh = ",".join(zh.split())
outStr = zh # 经过相关处理后得到中文的文本
return outStr
for i in range(1,101):
link = 'https://xxxxxxxx/super/' + str(i)
page = urllib.urlopen(link) # 读取link页面内容保存页面内容并读取
html = page.read()
reg = 'src="(.+?\.png)" type=' # 正则表达式
imgre = re.compile(reg) # 编译正则表达式为对象
answer = re.findall(imgre,html)[0] # 正则匹配 reg 相似的 编译为imgre 并在html文件中寻找
url = 'http://xxxxxxxx/' + answer # 添加图片保存位置信息 形成完整图片路径
name = answer.split('/static/svgs/super/')[-1].split('.png')[0] # 分离图片路径中闲杂信息只保留神兽名称
utf_name = translate(name) # 编码转换
# 查找归属用户
regg = '<span>(.*)</span>' # 另一正则表达式
imgree = re.compile(regg)
user = re.findall(imgree,html)[1] # 查找神兽归属用户信息
if user[-3:] == 'eth': # 判断归属用户信息是否正确
user = re.findall(imgree,html)[3]
if user[-3:] == 'eth':
user = '000'
# 下载图片
if user != '000':
urllib.urlretrieve(url,'/root/etmon/'+'%s__%d__%s.png'%(user,i,utf_name))
print link, ' ', user, i, utf_name, '.....complete!'

结语

学以致用的感觉,真好;如果还能赚钱,那就更好了。

参考文献

Python简单爬取图片实例
python提取标签中间的内容
python提取文本中的中文