本文最初参考:
http://www.cnblogs.com/fnng/p/3576154.html#!comments
有一个缺点就是只能爬取网页的第一页的图片,而整个帖子有70多页的内容图片。
#coding=utf-8
import urllib
import re
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl,'%s.jpg' % x)
x+=1
html = getHtml("http://tieba.baidu.com/p/2460150866")
print getImg(html)
所以本人对源代码进行了修改:可以爬取整个贴吧有70多页的图片,(爬取百度贴吧,不需要伪装成浏览器,比较方便)
#coding=utf-8
import urllib
import re
model_url = 'http://tieba.baidu.com/p/2460150866?pn='
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getPageNum(html):
reg = r'尾页'
imgre = re.compile(reg)
html_str = re.findall(imgre,html)
print html_str
num=int(html_str[0])
print num
return num
def getImg(html,i):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x=1
for imgurl in imglist:
urllib.urlretrieve(imgurl,'page_%s_the_%s.jpg' %(i,x))
x+=1
html = getHtml("http://tieba.baidu.com/p/2460150866")
getImg(html,1)
print('The 1 page\'s pictures are downloaded')
num = getPageNum(html)
print getPageNum(html)
print('The total page is %d' % num)
if num>1:
for i in range(44,num+1):
real_url = model_url+str(i)
print real_url
htmls=getHtml(real_url)
getImg(htmls,i)
print('The %d page\'s pictures are downloaded' % i)
下图为Python idle执行过程。
从蓝色框看出page_72_the_5.jpg表示爬取的第72页第5张图片。
从红色框看出爬取此百度贴吧共2515张图片。