Python3批量爬取指定微博中的图片

需求

批量爬取指定微博中的所有图片。

方法解析

先爬取指定微博,解析获得所有图片的链接。
然后爬取图片链接,进行下载。

代码

先决条件:指定微博列表。
一个 json 文件,存储下面的形式的数据。具体来说是一个存放着字符串的列表,每个字符串就是一个微博id。
在这里插入图片描述

记得修改headers 中的 user-agent 和 cookie 。没有这两个的话,微博会禁止访问。

import requests
import json
import re
import time


def downloadImage(href, cnt):
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
    }
    dimg = requests.get(href, headers=headers).content
    with open("E:\\pics\\" + str(cnt) + ".jpg", 'wb') as f:
        f.write(dimg)
        f.close()
        print("图片" + str(cnt) + "已下载")


def pic_spider(headers, weibo_id, surl="/mblog/picAll/Ku9M9q9cQ?rl=1"):
    base_url = "https://weibo.cn/"
    url = base_url + surl
    res = requests.get(url, headers=headers)
    one_pic_compile = re.compile('<img src="(.*?)"')
    pic_url_ls = one_pic_compile.findall(res.text)
    for i, pic_url in enumerate(pic_url_ls):
        downloadImage(pic_url, str(weibo_id) + str(i))


def main():
    with open("weibo_id.json", "r") as f:
        weibo_id_ls = json.load(f)

    base_url = "https://weibo.cn"
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
        "cookie": "SCF=AqVSTARJXRNZouo6nNF9xKz9Al9c_XbFdUndXfHBZANMf_O3I1wzz_pEtetOy0hNNNfGEZdvePHWT6mws0tpf34.; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5-_hGmCeI-rYRjN3uql2sS5NHD95Qf1hz0S0nR1KMRWs4Dqcj-i--fi-z7iKysi--fi-2RiKnp9Jqt; _T_WM=9f3070657cd64c960c880a9e53056c8c; SUB=_2A25MsDbuDeRhGeNG6VEW-CbFzDSIHXVsW1qmrDV6PUJbkdANLUnekW1NS3quSjDPfopWfmhP9G3AZ7_MLspv1O1D; SSOLoginState=1639204542"
    }
    pic_compile = re.compile('\[<a href="(.*?)">组图共')
    for i, weibo_id in enumerate(weibo_id_ls):
        # if i < 69:
        #     continue
        time.sleep(10)
        url = f"{base_url}/comment/{weibo_id}"
        print(i, url)
        res = requests.get(url, headers=headers)
        if "如果没有自动跳转" in res.text:
            print(weibo_id + "网址已失效")
            continue
        pic_url = pic_compile.findall(res.text)
        if len(pic_url) > 0:
            pic_spider(headers, weibo_id, pic_url[0])
        else:
            print(res.text)
            pic = re.findall('<img src="http:(.*?)\.jpg', res.text)
            if len(pic) == 0:
                pic = re.findall('<img src="http:(.*?)\.gif', res.text)
                pic_url = "http:" + pic[0] + ".gif"
            else:
                pic_url = "http:" + pic[0] + ".jpg"
            downloadImage(pic_url, str(weibo_id) + "0")


if __name__ == '__main__':
    main()

参考资料

https://regex101.com/
https://zhuanlan.zhihu.com/p/344384930

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要想爬取指定时间的微博,可以使用Python语言,借助第三方库来实现。 首先,我们需要登录微博账号,可以使用Selenium库来模拟浏览器登录账号。登录成功后,可以使用BeautifulSoup库从页面解析出需要的数据。 接着,我们需要构造搜索关键字和时间段。可以使用urlencode函数将关键字和时间段拼接成URL参数,并使用requests库发起请求。在发送请求时,可以设置请求头信息以模拟浏览器请求。 当接收到响应后,我们需要从页面解析出微博内容。可以使用正则表达式或BeautifulSoup库解析HTML,从提取出需要的信息。 最后,将爬取到的微博内容存储到本地文件或数据库,方便后续处理和分析。 需要注意的是,微博爬虫行为有一定的限制,如果频繁访问同一链接,可能会触发微博的反爬机制,导致IP被封禁,因此爬虫过程需要注意控制爬取频率。 ### 回答2: 要使用Python爬取指定时间的微博,我们可以通过以下步骤完成。 首先,我们需要安装相关的Python库。我们可以使用Python的requests库来发送HTTP请求获取网页内容,使用BeautifulSoup库来解析网页内容,以及使用selenium库来模拟浏览器行为。 接下来,我们需要登录微博账号来获取相应的权限。我们可以使用selenium库来模拟用户登录微博,并保存登录后的cookies。 然后,我们可以使用requests库发送HTTP请求来获取特定时间范围内的微博页面内容。我们可以构造适当的URL,并使用保存的cookies来验证权限。获取到的内容可以通过BeautifulSoup库进行解析。 最后,我们可以从解析的页面提取出我们想要的信息,例如微博的内容、用户信息等等。我们可以使用正则表达式或BeautifulSoup库来定位和提取相应的信息。 综上所述,凭借Python的相关库,我们可以很方便地实现爬取指定时间的微博的功能。 ### 回答3: 要用Python爬取指定时间的微博,首先需要了解微博爬取方式。微博网页版的URL结构可以通过观察分析得知,通过模拟请求这些URL,我们就可以获取指定时间的微博内容。 接下来,我们可以使用Python爬虫框架Scrapy来实现微博爬取。首先,我们需要创建一个Scrapy项目,然后在该项目的`spiders`文件夹创建一个爬虫文件。 在爬虫文件,我们需要定义`start_requests`方法来发送请求。我们可以使用`start_urls`来指定微博页面的URL,同时可以传递参数来指定时间段。可以通过修改URL的查询参数来实现。 爬取到的微博内容可以通过解析网页的HTML文档来获取。使用XPath或BeautifulSoup等库可以方便地提取出微博的内容、发布时间等信息。可以通过相应的选择器来定位HTML微博元素,然后提取相关信息。 最后,我们可以将爬取微博内容保存到数据库或文件,以便进一步处理和分析。可以使用Python的数据库库或文件操作库来实现。 在编写爬虫代码时,需要注意尊重网站的爬取规则,不要对网站造成过大的访问压力。可以适当设置请求的间隔时间,并且避免同时进行过多的并发请求。 总之,通过以上的步骤,我们可以使用Python爬取指定时间的微博,并且提取出所需的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wei *

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值