Python爬虫实例(3)-用BeautifulSoup爬取多个可翻页网页上的多张照片

本例解决的问题是:对于可以翻页的网站(例如:百度贴吧、豆瓣照片、微博等的翻页),把翻页的网页上的所有照片,都爬取到本地。

以百度贴吧为例,我要爬取https://tieba.baidu.com/p/4064957036?pn=1这个帖子里面所有的美女照片,就要从第1页到第19页。如果按照上一篇文章讲的,那我就要对19个网页使用19次爬虫,实在太麻烦。这次,我们只需要用1次就好!!

代码如下所示,亲测可用。运行环境如之前所述。

# -*- coding: utf-8 -*- 

#导入第三方包和模块
import requests
from bs4 import BeautifulSoup
import os

#在本地新建一个文件夹,命名为test_img,用以保存下载的图片
folder = 'test_img'
if not os.path.exists(folder):
    os.makedirs(folder)
    
#定义一个函数,用以下载图片
def download(url):
    response = requests.get(url)
    name = url.split('/')[-1]
    f = open(folder + '/' + name + '.jpg', 'wb')
    f.write(response.content)
    f.close()

header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

#网页可以翻19次,相当于改变url,循环19次;然后对每一个页面都执行‘获取src’和‘下载图片’的操作
for i in range(1,20):
    url_i = 'https://tieba.baidu.com/p/4064957036?pn=' + str(i)
    response_i = requests.get(url_i, headers = header)
    print(url_i)
    
    #获取第i个页面的url、response类、html、soup,以及该页面所有图片对应的src
    html_i = response_i.text
    soup_i = BeautifulSoup(html_i, 'html.parser')
    imgs_i = soup_i.find_all('img', attrs = {'class':'BDE_Image'})
    
    for img in imgs_i:
        img_src = img.get('src')
        print(img_src)
        download(img_src)  
print('OK')

本实例的技术难点在于:
1、用for循环表示这个可翻页帖子的19个url;
2、range()表示有序数组;
3、str()强制将整形转化为字符串;
4、温习BeautifulSoup模块中find_all(‘img’, {‘class’: ‘attrs’})与soup.get(‘src’),来获取所有图片的src的方法。

万维网上的网页千千万,爬取的方法,本质都是这样;然而,还是需要大量例子的练习,很多小问题也需要在实践中摸索。例如:
1、我想在本地建立一个二级文件夹,怎么通过Python来实现;
2、我想把下载的图片依次命名为1,2,3,…n,怎么实现;
3、当知乎或者微博,需要登录个人账号,才能登录爬取,那么怎么用爬虫模拟登录;
4、爬取的图片达到几千几万张时,怎么使用分布式爬虫来加快爬取速度;
5、当爬取的数据太大了,达到TB级别时,如何使用excel、数据库来存储爬取的数据;

不要紧,用爬虫去探索更多的妹子吧。

  • 6
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值