为练习python和爬虫,自己做了个抓取詹姆斯海报并保存在本地的小代码
步骤1:
选择提供图片的网站URL
http://desk.zol.com.cn/bizhi/5743_71437_2.html
步骤2:
用浏览器的网页分析工具,分析网页的元素,找到需要抓取的标签
这里我们用到了div,a,img等标签,在代码中可以看到
( 这里记录一个小问题,分析网页的同时我使用了软件fiddler,但是打开fiddler时,
调试代码运行requests代码发送https请求会报错,关了fiddler就可以了,这里应该是fiddler还需要进行证书设置才行,
后面有空再细讲)
步骤3:
编写代码抓取图片,效果如下图,
代码:
#爬取NBA图片,并保存在本地
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
from urllib import request
import os
import time
class Downloader(object):
def __init__(self):
self.__server = 'http://desk.zol.com.cn'
self.__firstPage = 'http://desk.zol.com.cn/bizhi/5743_71437_2.html'
self.__urls = []
self.__imageUrls = []
self.__name = ''
def getUrls(self):
req = requests.get(url=self.__firstPage)
req.encoding = 'GBK'
html = BeautifulSoup(req.text,'html.parser')
img_bf = html.find_all('div',class_ = 'photo-list-box')
a_bf = BeautifulSoup(str(img_bf[0]))
#print(a_bf)
a_li = a_bf.find_all('a')
#print(a_li)
for temp_str in a_li:
# print(self.__server + temp_str.get('href'))
self.__urls.append(self.__server + temp_str.get('href'))
temp_name = html.find('a',id= 'titleName')
#print(temp_name)
self.__name = temp_name.string
#print(self.__name)
def getImageUrls(self):
#print(self.__urls)
for page_url in self.__urls:
req = requests.get(url=page_url,verify=False)
html = BeautifulSoup(req.text, 'html.parser')
img_info = html.find('img',id = 'bigImg')
img_url = img_info.get('src')
#print(img_url)
self.__imageUrls.append(img_url)
time.sleep(1)
def downLoadImg(self):
#Todo 在F:盘下创建一个文件夹spide_imgs,文件都下载过去
path = 'F:\\spider_imgs\\' + self.__name
if not os.path.exists(path):
os.makedirs(path)
x = 0
for url in self.__imageUrls:
request.urlretrieve(url, path+'\%s.jpg' % x)
x += 1
time.sleep(1)
if __name__ == '__main__':
dl = Downloader()
dl.getUrls()
dl.getImageUrls()
dl.downLoadImg()
代码就不分析了,网上有很多requests+beautifulsoup爬虫的博客,我也是这么学的,这里给自己做个记录
后续还需要对requests和beautifulsoup的使用深入学习