爬取百度贴吧中的图片以及视频

本文介绍了一种使用Python实现的贴吧图片爬虫,通过解析HTML并利用正则表达式和XPath提取帖子URL及图片链接,将图片保存至本地。文章详细展示了如何构建请求头、发送请求、解析响应数据及保存图片的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将爬取下来的内容保存到本地

import re
import time
import urllib
import random
import requests
from lxml import etree


class ImmgeSpider:
    def __init__(self):
        self.headers = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)"}
        # self.headers = {"User_Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"}


    # 获取所有帖子URL列表
    def getPageUrl(self, url):
        # 获取贴吧页面的html
        res = requests.get(url, headers=self.headers)
        print(url)
        res.encoding = "utf-8"
        html = res.text
        # print(html)
        # 提取页面中所有帖子的url
        # parseHtml = etree.HTML(html)
        # t_list = parseHtml.xpath('//li[@class=" j_thread_list clearfix"]/div/div[2]/div[1]/div[1]/a/@href')
        p = re.compile('<div class="threadlist_title pull_left j_th_tit ">.*?<a rel="noreferrer" href="(.*?)" title', re.S)
        t_list = p.findall(html)
        print(t_list)

        for t_link in t_list:
            t_url = "http://tieba.baidu.com" + t_link
            self.getImageUrl(t_url)

    # 获取每个帖子中图片的url列表
    def getImageUrl(self, t_url):
        # 获取每个帖子的响应html
        res = requests.get(t_url, headers = self.headers)
        res.encoding = "utf-8"
        html = res.text
        parseHtml = etree.HTML(html)
        img_list = parseHtml.xpath('//*[@class="d_post_content j_d_post_content  clearfix"]/img/@src | ' +
                                   '//embed/@data-video')
        print(img_list)

        for img_link in img_list:
            self.writeImage(img_link)

    # 保存图片
    def writeImage(self, img_link):
        times = random.randint(2, 5)
        time.sleep(times)
        # 获取每张图片的二进制
        res = requests.get(img_link, headers=self.headers)
        res.encoding = "utf-8"
        html = res.content
        # 保存到本地(以图片的后12位为文件名)
        filename = img_link.split("/")[-1]
        if "?" in filename:
            filename = filename.split("?")[-1]
        with open("图片/"+ filename, 'wb') as f:
            f.write(html)
            print(filename, "下载成功")

    # 主函数
    def workOn(self):
        name = input("请输入贴吧名:")
        start = int(input("请输入起始页:"))
        end = int(input("请输入结束页:"))
        for pn in range(start, end+1):
            pn = (pn-1) * 50
            kw = {"kw": name}
            kw = urllib.parse.urlencode(kw)
            fullurl = "http://tieba.baidu.com/f?" + kw + "&ie=utf-8&pn=" + str(pn)
            # fullurl = "http://tieba.baidu.com/f?kw=%E6%A0%A1%E8%8A%B1&ie=utf-8&pn=50"
            # 直接调用类内函数
            self.getPageUrl(fullurl)


if __name__ == '__main__':
    spider = ImmgeSpider()
    spider.workOn()

 

转载于:https://www.cnblogs.com/zengsf/p/10028790.html

在Python中,我们可以使用BeautifulSoup库配合requests库来爬取百度贴吧中的图片。这里是简要步骤: 1. 安装必要的库: ``` pip install requests beautifulsoup4 ``` 2. 导入所需模块: ```python import requests from bs4 import BeautifulSoup import os ``` 3. 确定目标URL帖子页面结构。通常,帖子图片链接位于HTML的`img`标签内,可能在`a`标签的`href`属性里。比如: ```python url = "https://tieba.baidu.com/p/XXXXX" # 将XXXXX替换为你想要爬取的具体帖子ID headers = {'User-Agent': 'Mozilla/5.0'} ``` 4. 发送请求并解析内容: ```python response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') img_tags = soup.find_all('img') # 查找所有的图片标签 ``` 5. 提取图片链接: ```python image_links = [img['src'] for img in img_tags if 'data-original' in img.attrs] # 可能需要检查图片是否已压缩,选择"data-original"而非直接src ``` 6. 下载图片到本地: ```python if not os.path.exists("kongan_images"): os.makedirs("kongan_images") # 创建存放图片的文件夹 for link in image_links: img_response = requests.get(link, headers=headers) filename = f"kongan_images/{link.split('/')[-1]}" # 获取图片文件名 with open(filename, 'wb') as f: f.write(img_response.content) ``` 7. 完成后记得处理可能出现的网络错误或验证码情况。 注意:在实际操作中,网站可能会有反爬虫机制或版权限制,所以务必遵守相关法律法规,并尽量减少对服务器的压力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值