爬虫实战: 图片的批量爬取
生活随笔
收集整理的這篇文章主要介紹了
爬虫实战: 图片的批量爬取
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 找好練習(xí)網(wǎng)站(不要惡意爬取,爬取前面10也即可,避免給網(wǎng)站造成壓力)
網(wǎng)站鏈接:http://www.netbian.com/index.htm
2.實現(xiàn)方法:
本流程使用requests + bs4進(jìn)行爬取
python版本:python3.6(盡量不要使用python2)
3.爬取思路及注意實現(xiàn):
分析照片在網(wǎng)站上的真實鏈接
照片是二進(jìn)制文件,因此讀取的時候是content,保存的時候是,wb模式
如何定位照片元素是最重要的:個人建議學(xué)習(xí)bs4的select方法,簡單好用(后續(xù)熟練之后,可以結(jié)合多種元素定位方法)
爬蟲建議使用chrome瀏覽器,簡單好用。
4.完整腳本
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''批量爬取網(wǎng)站照片
'''
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
class SpiderPhoto(object):
def __init__(self, url):
self.url = url
def get_soup(self):
'''根據(jù)輸入url獲取soup
'''
try:
response = requests.get(self.url, headers=headers)
print(response)
response.raise_for_status
soup = BeautifulSoup(response.text, 'html.parser')
except Exception as e:
print('aaaaaaaa',e)
soup = 'None'
return soup
def get_all_img_urls(self,soup):
imgs = soup.select('div.list li a img')
return [item['src'] for item in imgs]
def save_photo(self,imgurl):
res = requests.get(imgurl)
name = imgurl.split('/')[-1]
with open(name, 'wb') as fw:
fw.write(res.content)
def start(self):
soup = self.get_soup()
imgs = self.get_all_img_urls(soup)
for imgurl in imgs:
print('33[1;33m開始爬取圖片: {imgurl}33[0m'.format(**locals()))
self.save_photo(imgurl)
if __name__ == '__main__':
urls = ['http://www.netbian.com/index.htm']
urls += ['http://www.netbian.com/index_{page}.htm'.format(**locals()) for page in range(2,10)]
for page,url in enumerate(urls):
print('33[1;32m開始爬取第 {} 頁33[0m'.format(page+1))
pp = SpiderPhoto(url)
pp.start()
5.個人小建議
本人喜歡輸出一些內(nèi)容,比如現(xiàn)在爬取多少頁,爬到那個item等等
因為在爬取過程中,有時候會因為爬蟲限制的問題導(dǎo)致腳本運行失敗,會在不同的頁面報錯,
這時可以提醒我們,給我們的爬蟲設(shè)置一些現(xiàn)在,比如增加等待時間,利用多線程或者多進(jìn)程的方式,
減少爬蟲中斷的概率。
歡迎大家討論學(xué)習(xí) ~
總結(jié)
以上是生活随笔為你收集整理的爬虫实战: 图片的批量爬取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为ICT学堂获取练习题及答案
- 下一篇: 「原创」普通黄胡蜂有毒吗