five羊 2023-08-31 20:00 采纳率: 100%
浏览 28
已结题

Python爬取微博话题全部内容

代码还存在缺陷,无法获取全部的话题内容,爬取结果只有10条,请帮忙修改完善一下。

img

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
import os

chrome_driver_path = "F:\死磕\stance分析\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver_path)

weibo_url = "https://s.weibo.com/weibo?q=%23chatgpt%23"
driver.get(weibo_url)

# 等待登录按钮加载出来
wait = WebDriverWait(driver, 10)
login_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[text()='登录']")))

# 点击登录按钮
login_button.click()

# 等待登录完成
time.sleep(10)  # 假设需要等待10秒钟登录完成,你可以根据实际情况调整等待时间

# 切回主页面
driver.switch_to.default_content()

# 模拟滚动加载内容
scroll_pause_time = 2.0
scroll_limit = 20  # 假设滚动20次

scrolls = 0
while scrolls < scroll_limit:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(scroll_pause_time)
    scrolls += 1

# 解析页面内容
page_source = driver.page_source

# 使用 Beautiful Soup 解析页面内容
from bs4 import BeautifulSoup

soup = BeautifulSoup(page_source, "html.parser")

# 查找博文内容
posts = soup.find_all("p", class_="txt")

# 设置保存目录
save_dir = "F:\死磕\stance分析\结果"

# 创建保存目录
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 逐条保存博文内容为 txt 文件
for i, post in enumerate(posts):
    post_text = post.get_text(strip=True)
    file_path = os.path.join(save_dir, f"weibo_{i + 1}.txt")

    with open(file_path, "w", encoding="utf-8") as file:
        file.write(post_text)

    print(f"保存第{i + 1}条微博至 {file_path}")

# 关闭浏览器
driver.quit()

print("爬取和保存完成!")
  • 写回答

4条回答 默认 最新

  • 大师兄6668 Python领域新星创作者 2023-08-31 20:44
    关注

    看了一下你的代码,你模拟出来的是PC端的网页,是点击下一页来翻页的,你滚动翻页根本不起作用。
    所以,你直接找到那个下一页的按钮,爬完当前页面后,点击一下下一页,然后继续爬,就可以了。

    不过我观察了一下,我发现这个页面的url是可以直接增加页数参数的,所以不用找那个按钮也行,你就直接

    for p in range(1,50): 
        weibo_url = "https://s.weibo.com/weibo?q=%23chatgpt%23&page="+str(p)
        driver.get(weibo_url)
        #这里按照原来的逻辑处理爬取即可。
    
    

    这样访问,然后在每个页面中按照你的逻辑直接爬取应该就可以了。你试试。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 赞助了问题酬金15元 8月31日
  • 创建了问题 8月31日

悬赏问题

  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的