跟linux有什么关系,python是跨平台的,爬取图片的代码如下:
import urllib.requestimport osimport randomdef url_open(url):
req=urllib.request.Request(url) #为请求设置user-agent,使得程序看起来更像一个人类
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1WOW64rv:43.0) Gecko/20100101 Firefox/43.0') #代理IP,使用户能以不同IP访问,从而防止被服务器发现
'''iplist=['1.193.162.123:8000','1.193.162.91:8000','1.193.163.32:8000']
proxy_support=urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER')]
urllib.request.install_opener(opener)'''
response=urllib.request.urlopen(req)
html=response.read() return htmldef get_page(url):
html=url_open(url).decode('utf-8')
a=html.find('current-comment-page')+23
b=html.find(']',a) #print(html[a:b])
return html[a:b]def find_imgs(url):
html=url_open(url).decode('utf-8')
img_addrs=[]
a=html.find('img src=') while a!=-1:
b=html.find('.jpg',a,a+140) if b!=-1: if html[a+9]!='h':
img_addrs.append('http:'+html[a+9:b+4]) else:
img_addrs.append(html[a+9:b+4]) else:
b=a+9
a=html.find('img src=',b) for each in img_addrs:
print(each+'我的打印') return img_addrsdef save_imgs(folder,img_addrs):
for each in img_addrs: #print('one was saved')
filename=each.split('/')[-1] with open(filename,'wb') as f:
img=url_open(each)
f.write(img)def download_mm(folder='ooxx',pages=10):
os.mkdir(folder)
os.chdir(folder)
url=""
page_num=int(get_page(url)) for i in range(pages):
page_num=page_num-1
page_url=url+'page-'+str(page_num)+'#comments'
img_addrs=find_imgs(page_url)
save_imgs(folder,img_addrs)if __name__=='__main__':
download_mm()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
完成
运行结果
抓取网站上的妹子照片。
第三方模块
superagent : 第三方Nodejs 模块,用于处理服务器和客户端的Http请求。
cheerio : 为服务器端定制的Jquery实现。
思路
通过superagent 获取目标网站的dom
通过cheerio对dom进行解析,获得通用布局。
如果只是爬取一个页面,则可以直接将目标页面的目标元素获取
如果是分页或者多个页面,可以通过循环获得目标链接,进行多次抓取。
实现
这里我们实现一个抓取网站妹子的照片。
目标网址:http://jandan.net/ooxx/ (对于该网站,并没有恶意攻击的意思.)
代码如下:
//引入第三方和通用模块var fs = require('fs')//为了将抓取的图片存到本地,使用fs
var superagent = require('superagent')//引入superagent
var cheerio = require('cheerio')//引入jquery实现
var filePath = '/node/学习/sis/img/'//定义抓取妹子文件存放路径
var count = 0//记录抓取数量
var test = []
//抓取一个页面的实现。
var getOnePage = function(url){
//因为煎蛋对请求做了限制,所以将cookie加上了。如果你要访问该网站的话,可以通过<a href="https://www.baidu.com/s?wd=%E6%B5%8F%E8%A7%88%E5%99%A8&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uAndPH6zm1I9PjPhuhRz0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjRLP1msP1TzPjTYnj0vnjfd" target="_blank" class="baidu-highlight">浏览器</a>查找cookie 并进行替换
superagent.get(url)
.set({
'user-agent':'Mozilla/5.0 (Windows NT 10.0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'
})
.set('cookie','500322148=53 Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454117846 Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454119909')
.set({
'accept' : 'text/html,application/xhtml+xml,application/xmlq=0.9,image/webp,*/*q=0.8',
'connection' : 'keep-alive',
'host' : 'jandan.net'
})
.end(function(err,sres){//这里是对获取的dom进行处理
if(err)throw err
var $ = cheerio.load(sres.text)
var nextUrl = $('.previous-comment-page').attr('href')//获得下一页的链接,为了开始下一次请求
$('img').each(function(index,ele){//循环该页面的所有图片并得到对应的链接,放进数组。
var u = ''
if($(ele).attr('org_src')){
u = $(ele).attr('org_src')
}else{
u = $(ele).attr('src')
}
test.push(u)
//通过superagent 获取图片数据,并保存到本地。
superagent.get(u).end(function(err,sres){
if(err)throw err
//根据访问路径获得文件名称
var ttt = u.split('/')
var name = ttt[ttt.length-1]
var path = filePath+name
fs.writeFile(path,sres.body,function(){
count++
console.log(u)
console.log('已成功抓取..'+count+'张')
})
})
})
if(null != nextUrl && '' != nextUrl){ //何时开始下一次请求
getOnePage(nextUrl)
}
})
}
getOnePage('http://jandan.net/ooxx/')//触发第一次请求开始
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)