使用Selenium爬取微博用户图片

前言

这是一个使用Selenium自动化从指定的微博用户页面中爬取图片并下载的Python脚本。Selenium被选用的主要原因在于其能够有效处理动态加载的内容,实现对复杂Web交互的自动化操作,同时通过并发下载和灵活的控制机制提高爬取效率和适应性。

代码

使用前提:

一、更换url

url页面必须包含以下页面,因为是代码逻辑就是对每个标签(“精选”,“微博”,“视频”,“相册”)进行处理。只能爬取博主页面(“精选”,“微博”,“视频”,“相册”)的所有jpg图片。

二、修改本地存储的文件夹。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import urllib.request
import os
import time
from concurrent.futures import ThreadPoolExecutor

# 创建保存图像的主目录,换成你要保存的文件夹
save_dir = "D:/WeiboSrc/"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 设置浏览器选项
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36')

# 初始化WebDriver
driver = webdriver.Chrome(options=options)
driver.get("url地址,更换成你要爬取的url地址。。。。。。。。。")

# 等待页面加载
time.sleep(5)

# 定义爬取函数
def crawl_images():
    # 滚动页面以加载更多图片
    scroll_pause_time = 1  # 调整滚动等待时间
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:
        # 向下滚动页面
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(scroll_pause_time)
        
        # 计算新的滚动高度并比较与最后的滚动高度
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

    # 获取所有图片的URL
    images = driver.find_elements(By.TAG_NAME, 'img')
    img_urls = []
    for img in images:
        img_url = img.get_attribute('src')
        if img_url and img_url.endswith('.jpg'):
            # 替换URL中常见的分辨率标记为'/large/'以获取高分辨率图片
            high_res_url = (img_url.replace('/orj360/', '/large/')
                            .replace('/orj480/', '/large/')
                            .replace('/mw690/', '/large/')
                            .replace('/bmiddle/', '/large/'))
            img_urls.append(high_res_url)
    return img_urls

# 定义标签名称
tabs = ["精选", "微博", "视频", "相册"]

# 循环点击标签并爬取图片
for tab in tabs:
    try:
        # 创建标签对应的子文件夹
        tab_dir = os.path.join(save_dir, tab)
        if not os.path.exists(tab_dir):
            os.makedirs(tab_dir)

        tab_element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, f"//span[text()='{tab}']"))
        )
        ActionChains(driver).move_to_element(tab_element).click().perform()
        time.sleep(3)  # 等待页面加载

        img_urls = crawl_images()

        # 并行下载图片函数
        def download_image(idx, img_url):
            try:
                img_path = os.path.join(tab_dir, f"image_{idx+1}.jpg")
                urllib.request.urlretrieve(img_url, img_path)
                print(f"Saved {img_path}")
            except Exception as e:
                print(f"Failed to save {img_url}: {e}")

        # 使用线程池并行下载图片
        with ThreadPoolExecutor(max_workers=20) as executor:
            for idx, img_url in enumerate(img_urls):
                executor.submit(download_image, idx, img_url)
    except Exception as e:
        print(f"Failed to load tab {tab}: {e}")

# 关闭WebDriver
driver.quit()


三、结果

### 回答1: 微博作为全球最大的中文社交媒体平台之一,每天都会发布大量的文字信息,其中包括无数的用户评论。利用Python爬虫技术,我们可以快速地获取并整理这些评论信息,进而生成一份详细的生词云图,从而方便用户针对不同的关键词进行分析和学习。 首先,我们需要使用Python库中的beautifulsoup4和requests来爬取微博评论数据。这些库可以帮助我们快速地获取到经过封装的HTML代码,从而抓取所需数据。接着,我们可以使用jieba和wordcloud两个Python库以及一些其他的数据处理和可视化工具,来对抓取的评论进行处理,并生成云图。 具体来说,我们需要通过编写Python代码,实现以下几个主要步骤: 第一步,我们需要获取微博评论数据。使用requests库可以访问目标网页并获取到所有页面的HTML代码。如果该网页需要登录,我们可以使用selenium实现自动化登录。 第二步,我们需要处理评论数据。首先利用beautifulsoup4解析获取到的HTML代码,提取出我们所需的评论数据。接着使用jieba将评论进行分词,统计每个词语的出现频率,并将结果以字典形式保存。 第三步,我们需要生成云图。使用wordcloud库来生成词云,可以快速方便的将处理后的数据可视化展现。可以自定义云图的样式和主题,并根据需要调整字体、颜色等参数。 最后,我们可以将云图保存为图片或PPT等格式,并使用其他数据处理和分析工具来进一步分析抓取到的微博评论数据,以及对所涉及的关键词进行学习和研究。 ### 回答2: Python语言可以帮助我们实现自动化爬取社交媒体上的数据,比如微博评论。我们可以通过Python的第三方库BeautifulSoup、requests等,将微博评论的HTML代码解析出来,并将其中的文本数据提取出来。接着,我们可以用jieba分词库对微博评论中的文本进行分词,将其转化为一组词语,方便后续的统计分析。 在分词之后,我们可以用Python的第三方库WordCloud将这些词语进行可视化。WordCloud库能够实现词云的制作,词云是将大量的单词云朵状的排列在一起,形成类似云的形状的一种图案。在词云中,单词的大小和出现的频率成正比,频率越高的单词会出现在词云的中心位置,而频率较低的单词则会出现在词云的边缘位置。 制作微博评论生词云的步骤,大致包括以下几步:爬取微博评论,用jieba分词将文本转化为一组词语,统计每个词语出现的频率,然后用WordCloud库对词频进行可视化,生成生动形象的词云图。 除此以外,Python还可以结合其他第三方库和工具,对生成的词云图进行更深入的操控,比如设置词云的形状、颜色、字体等等,使得结果更加个性化且符合需求。 ### 回答3: Python是一种程序语言,其强大的网络爬虫库使得它成为研究微博评论的理想工具。使用Python爬取微博评论的过程包括三个主要步骤:登录微博,抓取评论数据和生成词云。 首先,登录微博是必不可少的,因为只有登录成功才能访问评论的数据。这可以通过使用selenium等库自动模拟用户登录进行实现。完成登录后,我们可以获取所需的微博ID和评论页面URL。 第二步是抓取评论数据。我们可以使用Python库如beautifulsoup和requests等,访问评论页面,提取所需评论数据并保存到本地文件或数据库中。我们还要确保我们抓取到足够量的数据,以便于后续处理。 最后,我们需要将评论数据转化为词云。Python中有一些非常强大的词云生成库,例如wordcloud和jieba库,可以帮助我们将大量文本数据转化为美观的词云。我们可以按照自己的设计风格来生成词云,如调整文字颜色,字号和布局等。 综上所述,使用Python爬取微博评论生成词云的过程相对较为简单,但其中要注意一些具体的细节和技巧,例如如何处理中文文本、如何提取评论数据等。需要掌握一定的措施来处理这些问题,并根据需要进行优化,以达到最好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值