您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python+selenium+firefox如何模拟登录微博并爬取数据
## 前言
在当今大数据时代,社交媒体数据挖掘具有重要价值。微博作为中国最大的社交媒体平台之一,蕴含着丰富的用户行为和舆情信息。本文将详细介绍如何利用Python+selenium+firefox技术组合实现微博模拟登录及数据爬取的全流程。
## 一、环境准备
### 1.1 安装必要组件
```python
# 安装selenium库
pip install selenium
# 安装firefox浏览器
# 下载地址:https://www.mozilla.org/zh-CN/firefox/new/
Firefox需要geckodriver驱动才能被selenium控制: 1. 访问 https://github.com/mozilla/geckodriver/releases 2. 下载对应系统版本的驱动 3. 将解压后的可执行文件放在系统PATH路径或项目目录下
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
# 初始化浏览器
driver = webdriver.Firefox()
driver.get("https://weibo.com/login.php")
# 显式等待页面加载
wait = WebDriverWait(driver, 10)
微博登录页面有用户名密码和扫码登录两种方式,我们需要自动填充表单:
# 切换到账号密码登录
switch_btn = wait.until(
EC.element_to_be_clickable((By.XPATH, '//a[@action-type="btn_change"]'))
)
switch_btn.click()
# 填写登录信息
username = wait.until(
EC.presence_of_element_located((By.XPATH, '//input[@id="loginname"]'))
)
username.send_keys("your_username")
password = driver.find_element(By.XPATH, '//input[@type="password"]')
password.send_keys("your_password")
# 点击登录按钮
submit = driver.find_element(By.XPATH, '//a[@action-type="btn_submit"]')
submit.click()
微博可能会触发验证码,需要人工干预或接入打码平台:
try:
# 等待验证码出现
captcha = WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.XPATH, '//img[@class="verifycode_image"]'))
)
print("需要验证码,请手动输入")
time.sleep(30) # 留出人工输入时间
except:
print("未出现验证码")
登录成功后跳转到目标用户主页:
driver.get("https://weibo.com/u/TARGET_UID")
wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="WB_main"]')))
使用XPath定位微博内容元素:
weibo_list = []
items = driver.find_elements(By.XPATH, '//div[@class="WB_text" and @node-type="feed_list_content"]')
for item in items:
content = item.text.strip()
if content:
weibo_list.append(content)
微博采用动态加载,需要模拟滚动:
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(3)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
import csv
with open('weibo_data.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(['序号', '内容'])
for i, weibo in enumerate(weibo_list, 1):
writer.writerow([i, weibo])
import pymysql
conn = pymysql.connect(host='localhost', user='root',
password='', database='weibo')
cursor = conn.cursor()
create_table = """
CREATE TABLE IF NOT EXISTS weibo_content (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT,
crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cursor.execute(create_table)
insert_sql = "INSERT INTO weibo_content (content) VALUES (%s)"
cursor.executemany(insert_sql, [(w,) for w in weibo_list])
conn.commit()
反爬机制:微博有严格的反爬措施,建议:
Cookie管理:登录后可以保存cookie避免重复登录:
import pickle
# 保存cookie
pickle.dump(driver.get_cookies(), open("weibo_cookies.pkl", "wb"))
# 加载cookie
cookies = pickle.load(open("weibo_cookies.pkl", "rb"))
for cookie in cookies:
driver.add_cookie(cookie)
本文详细介绍了使用Python+selenium+firefox实现微博模拟登录和数据爬取的全流程。实际应用中还需要考虑更多细节问题,如异常处理、性能优化等。希望这篇教程能为您的社交媒体数据挖掘工作提供帮助。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。