爬取百度贴吧照片并保存在本地 (python/BeautifulSoup)

一 前言

  自从大二学习python,了解爬虫和机器学习(当然只是皮毛罢了)认真学习了大概一个多月后,自己就因为考试等其他各方面的因素将python弃置高阁,很久没有用了。
  现在回头来看,后悔不已,只好捡起来,重新回顾,整理知识点。伤心的话就不说了,从现在开始,加油努力干!

二 实现百度贴吧照片的爬取

代码如下:

import requests
import re
import lxml
from bs4 import BeautifulSoup
import os

class BaiduTieba:
    def __init__(self, name, page_count):
        self.url = "https://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}"
        self.name = name
        self.page_count = page_count
        self.headers = {
            "User-Agent": "大家使用自己的headers"
        }

    def get_url_list(self): #获取页面url列表
        return [self.url.format(self.name, i * 50) for i in range(self.page_count)]

    def create_directory(self, page_num): #创建文件夹,并返回文件夹路径
        dir_name = "百度贴吧{}照片——第{}页".format(self.name, page_num)
        if not os.path.exists(dir_name):
            os.mkdir(dir_name)
        dir_path = os.getcwd() + '/' + dir_name
        return dir_path

    def parse_url(self, url): #分析页面url地址,返回该页所有图片的url列表
        response = requests.get(url)
        soup = BeautifulSoup(response.content.decode(), "lxml")
        pictures_list = soup.find_all("a", rel = "noreferrer", class_ = "thumbnail vpic_wrap")
        url_list = []
        for i in pictures_list:
            url_list.append(i.contents[0]['bpic'])
        return url_list

    def save_pictures(self, url_list, page_num): #保存图片
        dir_path = self.create_directory(page_num)
        for url in url_list:
            file_path = dir_path + '/' + "number{}.jpg".format(url_list.index(url) + 1)
            print("file_path = %s" % file_path)
            response = requests.get(url)
            with open(file_path, "wb") as file:
                file.write(response.content)
        print("第{}页保存完毕".format(page_num))

    def run(self): #实现主要逻辑
        #1. 构造url列表
        url_list = self.get_url_list()
        #2. 发送请求,获取响应
        for url in url_list:
            pictures_url_list = self.parse_url(url)
            #3. 保存图片
            self.save_pictures(pictures_url_list, url_list.index(url) + 1)

if __name__ == '__main__':
    name = input("请输入贴吧主人名称(如:刘亦菲):")
    page_count = input("请输入爬取页面的数量(如:2):")
    baidu_tieba = BaiduTieba(name, int(page_count))
    baidu_tieba.run()

关于代码的解释,很简单,这里就不再过多的阐述了。最主要的是parse_url()函数,剩下的都是保存和前期准备工作。

说实话,小编今天被“教育”了,所以不想详细介绍,只是做了一个记录。本来小编实现了爬取照片之后,想要趁热打铁实现爬虫爬取笔趣阁小说,但是却失败了,找了好久的Bug,最终还是没找出来。

最后问了“超级大佬”,大佬一统询问,小编现在感觉自己爬虫跟没学一样,哎!

还是那句话,贬低自己的话,就不想再说了,各种鸡汤,小编也不想多喝。只是扪心自问,一定要加油,一定要顶住这股压力(升学考研也好,保研也好,加油吧)!路漫漫其修远兮,吾将上下而求索!与君共勉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值