关键词

python+selenium爬取微博热搜存入Mysql的实现方法

下面是“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 数据库中。

本文链接:http://task.lmcjl.com/news/17216.html

展开阅读全文