【python抓站】遇到问题。。求高人指点
小弟新学python,想做一个抓站的小程序练一下手。具体来说,就是随便找了一个漫画的网站,然后想能够把某一部漫画完整地抓下来
但是在获取大图片的url时出现了问题。比如下面这个网址
http://comic.131.com/content/16117/187873/3.html
显然,我需要获取最大的那张图的url。对于131这个网站来说,它的漫画的主图片的id叫做ComicBigPic
<img id="comicBigPic" src="http://res6.comic.131.com/ab/f2/bcd0da3723fa0293f33c1ca3d626f8b014b6.jpg" alt="【python抓站】遇到有关问题。求高人指点" oncontextmenu="return false;">
import html.parser
import urllib.request
class parseEpisode(html.parser.HTMLParser):
def handle_starttag(self,tag,attrs):
if tag == 'img':
istarget = 0
for key,value in attrs:
if key == 'id' and value == 'comicBigPic':
print(attrs)
istarget = 1
if key == 'src' and istarget:
istarget = 0
self.picurl = value
page = parseEpisode()
response = urllib.request.urlopen('http://comic.131.com/content/16117/187873/3.html')
page.feed(response.read().decode('utf-8'))
[('id', 'comicBigPic'), ('src', 'http://res.files.131.com/t.gif'), ('alt', '魔物娘的(相伴)日常-第10话-少年漫画-オカヤド@乾武丸'), ('oncontextmenu', 'return false;')]
#! /urs/bin/env python
# coding: cp936
import re
import urllib
url = r'http://comic.131.com/content/16117/187873/2.html'
url_base = url[:url.rfind('/')+1]
res_bounds = r'option value="(\d+)"'
res_img = r'id="imgjs".*?img=(http://.*?)"'
def getSource(url):
''' get source of the page '''
page = urllib.urlopen(url)
if page:
return page.read()
else:
return ''
def main():
''' main function '''
page = getSource(url)
img_dir = r'E:\test\test\\'
if page:
m = re.findall(res_bounds,page,re.S
[解决办法]
re.M)
if m:
lower_bound = int(m[0])
upper_bound = int(m[-1])
print '图片范围: [%d - %d]' % (lower_bound, upper_bound)
for i in range(lower_bound,upper_bound+1):
print '获取页面', i, '.html 的内容...'
img_page = getSource(url_base+str(i)+'.html')
if img_page:
print '\t处理第', i, ' 张图片地址...'
img_url = re.findall(res_img,img_page,re.S
[解决办法]
re.M)
if img_url:
urllib.urlretrieve(img_url[0],img_dir+str(i)+'.jpg')
print '\t第', i, '张图片已保存'
else:
print '\t获取第', i, ' 张图片地址出错'
else:
print '指定网页', i, '.html 不包含图片'
img_page = ''
print '完成'
# unit test
if __name__=='__main__':
main()
图片范围: [1 - 31]
获取页面 1 .html 的内容...
处理第 1 张图片地址...
第 1 张图片已保存
获取页面 2 .html 的内容...
处理第 2 张图片地址...
第 2 张图片已保存
获取页面 3 .html 的内容...
处理第 3 张图片地址...
第 3 张图片已保存
获取页面 4 .html 的内容...
处理第 4 张图片地址...
第 4 张图片已保存
获取页面 5 .html 的内容...
处理第 5 张图片地址...
第 5 张图片已保存
获取页面 6 .html 的内容...
处理第 6 张图片地址...
第 6 张图片已保存
获取页面 7 .html 的内容...
处理第 7 张图片地址...
第 7 张图片已保存
获取页面 8 .html 的内容...
处理第 8 张图片地址...
第 8 张图片已保存
获取页面 9 .html 的内容...
处理第 9 张图片地址...
第 9 张图片已保存
获取页面 10 .html 的内容...
处理第 10 张图片地址...
第 10 张图片已保存
获取页面 11 .html 的内容...
处理第 11 张图片地址...
第 11 张图片已保存
获取页面 12 .html 的内容...
处理第 12 张图片地址...
第 12 张图片已保存
获取页面 13 .html 的内容...
处理第 13 张图片地址...
第 13 张图片已保存
获取页面 14 .html 的内容...
处理第 14 张图片地址...
第 14 张图片已保存
获取页面 15 .html 的内容...
处理第 15 张图片地址...
第 15 张图片已保存
获取页面 16 .html 的内容...
处理第 16 张图片地址...
第 16 张图片已保存
获取页面 17 .html 的内容...
处理第 17 张图片地址...
第 17 张图片已保存
获取页面 18 .html 的内容...
处理第 18 张图片地址...
第 18 张图片已保存
获取页面 19 .html 的内容...
处理第 19 张图片地址...