selenium爬取新浪微博

本文介绍了一个利用Selenium登录新浪微博并搜索关键字,爬取内容的过程。内容抓取后,通过MongoDB数据库进行存储,利用update_one实现去重功能。同时,通过tqdm添加进度条以监控爬取进度。为了提高效率,采用无头浏览器并禁载图片,解析页面则采用了Scrapy的selector工具。

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

逻辑很简单,先登录之后,搜索一个关键字,爬取内容

注意

  1. 使用mongodb数据库,注意update_one自带去重。
  2. tqdm添加进度条
  3. 无头浏览器
  4. 不加载图片
  5. 使用scrapy的selector解析页面

from selenium import webdriver
from scrapy import Selector
import time
import pymongo
from tqdm import tqdm


# 链接到mongodb
client = pymongo.MongoClient('localhost', 27017)
# 使用名叫weibo的数据库
db = client.weibo

chrome_options = webdriver.ChromeOptions()
# 配置不加载图片
prefs = {
   "profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
# 配置无头浏览器
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)

# browser = webdriver.Chrome()

# 打开登陆页面
browser.get(
### 如何使用 Selenium 爬取新浪微博评论数据 为了成功爬取新浪微博的评论数据,可以按照以下方法操作。此过程涉及多个关键环节,包括登录、定位页面元素以及处理动态加载的内容。 #### 1. 登录微博账号 由于新浪微博有严格的反爬虫机制,因此需要先完成模拟登录才能访问受保护的数据。可以通过 `selenium` 自动化控制浏览器输入用户名和密码并提交表单[^4]。 ```python from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get('https://weibo.com') # 定位用户名和密码字段,并填写信息 username_input = driver.find_element(By.NAME, 'username') password_input = driver.find_element(By.NAME, 'password') submit_button = driver.find_element(By.CLASS_NAME, 'login_btn') username_input.send_keys('your_username') password_input.send_keys('your_password') submit_button.click() time.sleep(5) # 等待页面跳转 ``` #### 2. 访问目标微博页面 在登录完成后,导航至具体的目标微博页面。通常每条微博都有唯一的 URL 地址,可以直接通过该地址进入详情页[^2]。 ```python target_weibo_url = "https://weibo.com/xxx" # 替换为目标微博的实际URL driver.get(target_weibo_url) time.sleep(3) # 等待页面完全加载 ``` #### 3. 处理 Ajax 动态加载 新浪微博采用 AJAX 技术异步加载更多评论内容,在这种情况下单纯依赖静态 HTML 是不够的。需借助 `selenium` 的滚动功能触发更多的评论显示出来[^1]。 ```python def scroll_down(driver): last_height = driver.execute_script("return document.body.scrollHeight;") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) new_height = driver.execute_script("return document.body.scrollHeight;") if new_height == last_height: break last_height = new_height scroll_down(driver) ``` #### 4. 提取评论数据 当所有可见区域内的评论都被加载完毕之后,就可以开始解析 DOM 树获取所需的信息了。这里推荐使用 XPath 或 CSS Selectors 来精确定位各个评论节点[^3]。 ```python comments_elements = driver.find_elements(By.CSS_SELECTOR, '.comment_item .content span.txt') for comment in comments_elements: print(comment.text.strip()) ``` #### 数据存储 最后一步就是把收集到的数据保存下来供进一步分析之用。可以选择多种方式如写入文件或者存入数据库等。 ```python with open('weibo_comments.txt', mode='w+', encoding='utf8') as f: for cmt in extracted_comments: f.write(cmt + '\n') ``` --- ### 注意事项 - **频率控制**:频繁请求可能会被服务器识别为恶意行为而封禁IP,建议适当增加延时。 - **异常捕获**:实际运行过程中难免遇到各种意外状况,应加入 try-except 块提高稳定性。 - **合法性声明**:确保遵守相关法律法规和服务条款,仅用于合法目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值