下面是“python+selenium爬取微博热搜存入Mysql的实现方法”的详细攻略:
1. 准备工作
安装 Selenium
Selenium 是 Python 的一种库,用于浏览器自动化测试,可以自动在浏览器中打开网页、模拟人类操作,从而实现自动化获取网页的效果。我们可以通过以下命令来安装 Selenium:
pip install selenium
安装浏览器驱动
Selenium 需要依赖浏览器驱动,因此需要下载并安装浏览器驱动。本文以 Chrome 浏览器为例,需要下载对应的 Chrome 浏览器驱动,并添加到环境变量中。
下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads
安装 PyMySQL
PyMySQL 是 Python 语言操作 MySQL 数据库的库,可以通过以下命令来安装:
pip install PyMySQL
2. 编写代码
导入依赖库
import time
import pymysql
from selenium import webdriver
其中,time
是 Python 自带的一个库,可以用于进行时间延迟操作。
打开浏览器并访问页面
driver = webdriver.Chrome()
driver.get('https://s.weibo.com/top/summary')
以上代码会打开一个 Chrome 浏览器窗口,并访问微博热搜榜的页面。
等待页面加载完成
由于访问页面需要时间,因此我们需要等待页面加载完成后再进行下一步操作。这里我们使用 time 库来进行 3 秒的延迟:
time.sleep(3)
获取页面内容
items = driver.find_elements_by_css_selector('#pl_top_realtimehot > table > tbody > tr')
以上代码会使用 CSS 选择器来获取页面中的热搜榜信息,我们将所有行的信息都存储在 items
变量中。
遍历获取到的信息并写入 MySQL 数据库
# MySQL 连接信息
db_host = 'localhost'
db_port = 3306
db_user = 'root'
db_password = '123456'
db_dbname = 'test'
# 连接 MySQL 数据库
conn = pymysql.connect(
host=db_host,
port=db_port,
user=db_user,
password=db_password,
db=db_dbname,
charset='utf8mb4'
)
# 获取游标
cursor = conn.cursor()
# 遍历获取到的信息,将数据写入 MySQL 数据库
for item in items:
# 获取热搜名称及热度信息
title = item.find_element_by_css_selector('.td-02 > a').text
count = item.find_element_by_css_selector('.td-02 > span').text
# SQL 语句
sql = "INSERT INTO `weibo_hot_search` (`title`, `count`) VALUES ('{0}', '{1}')".format(title, count)
# 执行 SQL 语句
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()
以上代码使用了 PyMySQL 库来连接 MySQL 数据库,并通过 SQL 语句将获取到的热搜信息写入到数据库中。
3. 示例说明
示例一
现在我们需要将所有热搜信息存入 MySQL 数据库。
import time
import pymysql
from selenium import webdriver
# MySQL 连接信息
db_host = 'localhost'
db_port = 3306
db_user = 'root'
db_password = '123456'
db_dbname = 'test'
# 连接 MySQL 数据库
conn = pymysql.connect(
host=db_host,
port=db_port,
user=db_user,
password=db_password,
db=db_dbname,
charset='utf8mb4'
)
# 获取游标
cursor = conn.cursor()
# 打开浏览器并访问页面
driver = webdriver.Chrome()
driver.get('https://s.weibo.com/top/summary')
# 等待页面加载完成
time.sleep(3)
# 获取页面内容
items = driver.find_elements_by_css_selector('#pl_top_realtimehot > table > tbody > tr')
# 遍历获取到的信息,将数据写入 MySQL 数据库
for item in items:
# 获取热搜名称及热度信息
title = item.find_element_by_css_selector('.td-02 > a').text
count = item.find_element_by_css_selector('.td-02 > span').text
# SQL 语句
sql = "INSERT INTO `weibo_hot_search` (`title`, `count`) VALUES ('{0}', '{1}')".format(title, count)
# 执行 SQL 语句
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()
以上示例会将获取到的所有热搜信息存入 MySQL 数据库中。
示例二
现在我们需要只将排名前 5 的热搜信息存入 MySQL 数据库。
import time
import pymysql
from selenium import webdriver
# MySQL 连接信息
db_host = 'localhost'
db_port = 3306
db_user = 'root'
db_password = '123456'
db_dbname = 'test'
# 连接 MySQL 数据库
conn = pymysql.connect(
host=db_host,
port=db_port,
user=db_user,
password=db_password,
db=db_dbname,
charset='utf8mb4'
)
# 获取游标
cursor = conn.cursor()
# 打开浏览器并访问页面
driver = webdriver.Chrome()
driver.get('https://s.weibo.com/top/summary')
# 等待页面加载完成
time.sleep(3)
# 获取页面内容
items = driver.find_elements_by_css_selector('#pl_top_realtimehot > table > tbody > tr')
# 遍历获取到的排名前 5 的信息,将数据写入 MySQL 数据库
for i in range(5):
# 获取热搜名称及热度信息
item = items[i]
title = item.find_element_by_css_selector('.td-02 > a').text
count = item.find_element_by_css_selector('.td-02 > span').text
# SQL 语句
sql = "INSERT INTO `weibo_hot_search` (`title`, `count`) VALUES ('{0}', '{1}')".format(title, count)
# 执行 SQL 语句
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()
以上示例会将获取到的排名前 5 的热搜信息存入 MySQL 数据库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python+selenium爬取微博热搜存入Mysql的实现方法 - Python技术站