在本攻略中,我们将介绍如何使用Python基于多线程实现抓取数据并存入数据库。以下是一个完整攻略,包括两个示例。
步骤1:创建数据库
首先,我们需要创建一个数据库来存储抓取的数据。我们可以使用MySQL数据库,也可以使用其他数据库,如PostgreSQL、SQLite等。
以下是一个示例代码,演示如何使用MySQL数据库创建一个名为“test”的数据库:
CREATE DATABASE test;
在上面的代码中,我们使用CREATE DATABASE语句创建一个名为“test”的数据库。
步骤2:创建数据表
接下来,我们需要创建一个数据表来存储抓取的数据。我们可以使用MySQL数据库,也可以使用其他数据库,如PostgreSQL、SQLite等。
以下是一个示例代码,演示如何使用MySQL数据库创建一个名为“hot”的数据表:
CREATE TABLE hot (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
index INT NOT NULL,
PRIMARY KEY (id)
);
在上面的代码中,我们使用CREATE TABLE语句创建一个名为“hot”的数据表,该数据表包含id、title和index三个字段。其中,id字段是自增长的主键。
步骤3:使用Python多线程抓取数据并存入数据库
接下来,我们需要使用Python多线程抓取数据并存入数据库。我们可以使用requests库发送HTTP请求,并使用BeautifulSoup库解析HTML页面。然后,我们可以使用Python多线程并发抓取数据,并将抓取的数据存入数据库。
以下是一个示例代码,演示如何使用Python多线程抓取今日热榜数据并存入MySQL数据库:
import requests
from bs4 import BeautifulSoup
import threading
import pymysql
# 数据库连接信息
db_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': '123456',
'db': 'test',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
# 发送HTTP请求
def fetch(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
hot_list = soup.select('.list-group-item')
hot_data = []
for hot in hot_list:
hot_title = hot.select_one('a').text
hot_index = hot.select_one('small').text
hot_data.append((hot_title, hot_index))
return hot_data
# 存入数据库
def save(data):
connection = pymysql.connect(**db_config)
try:
with connection.cursor() as cursor:
sql = 'INSERT INTO hot (title, index) VALUES (%s, %s)'
cursor.executemany(sql, data)
connection.commit()
finally:
connection.close()
# 多线程抓取数据
def multi_thread_fetch(urls):
threads = []
for url in urls:
t = threading.Thread(target=lambda: save(fetch(url)))
threads.append(t)
t.start()
for t in threads:
t.join()
# 抓取数据并存入数据库
urls = [
'https://tophub.today/n/KqGqZMzJQv',
'https://tophub.today/n/2QqGqZMzJQv',
'https://tophub.today/n/3QqGqZMzJQv'
]
multi_thread_fetch(urls)
在上面的代码中,我们首先定义了一个db_config字典,包含数据库连接信息。接下来,我们定义了一个fetch函数,用于发送HTTP请求并解析HTML页面。然后,我们定义了一个save函数,用于将抓取的数据存入数据库。最后,我们定义了一个multi_thread_fetch函数,用于多线程并发抓取数据并存入数据库。
在multi_thread_fetch函数中,我们首先创建了一个空的线程列表threads。然后,我们使用for循环遍历urls列表,为每个URL创建一个线程,并将线程添加到threads列表中。接下来,我们使用start方法启动每个线程。最后,我们使用join方法等待所有线程完成。
示例1:抓取今日热榜数据并打印
以下是一个示例代码,演示如何使用Python抓取今日热榜数据并打印:
import requests
from bs4 import BeautifulSoup
# 发送HTTP请求
url = 'https://tophub.today/n/KqGqZMzJQv'
response = requests.get(url)
# 解析HTML页面
soup = BeautifulSoup(response.text, 'html.parser')
hot_list = soup.select('.list-group-item')
# 提取热榜数据
hot_data = []
for hot in hot_list:
hot_title = hot.select_one('a').text
hot_index = hot.select_one('small').text
hot_data.append((hot_title, hot_index))
# 打印数据
for hot in hot_data:
print(hot)
在上面的代码中,我们首先使用requests库发送HTTP请求,并将响应保存到response变量中。接下来,我们使用BeautifulSoup库解析HTML页面,并使用select方法获取热榜列表。对于每个热搜,我们使用select_one方法获取热搜关键词和热度指数,并将它们保存到hot_data列表中。最后,我们使用for循环打印热榜数据。
示例2:抓取今日热榜数据并存入数据库
以下是一个示例代码,演示如何使用Python抓取今日热榜数据并存入MySQL数据库:
import requests
from bs4 import BeautifulSoup
import pymysql
# 数据库连接信息
db_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': '123456',
'db': 'test',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
# 发送HTTP请求
def fetch(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
hot_list = soup.select('.list-group-item')
hot_data = []
for hot in hot_list:
hot_title = hot.select_one('a').text
hot_index = hot.select_one('small').text
hot_data.append((hot_title, hot_index))
return hot_data
# 存入数据库
def save(data):
connection = pymysql.connect(**db_config)
try:
with connection.cursor() as cursor:
sql = 'INSERT INTO hot (title, index) VALUES (%s, %s)'
cursor.executemany(sql, data)
connection.commit()
finally:
connection.close()
# 抓取数据并存入数据库
url = 'https://tophub.today/n/KqGqZMzJQv'
data = fetch(url)
save(data)
在上面的代码中,我们首先定义了一个db_config字典,包含数据库连接信息。接下来,我们定义了一个fetch函数,用于发送HTTP请求并解析HTML页面。然后,我们定义了一个save函数,用于将抓取的数据存入数据库。
在最后一段代码中,我们首先使用fetch函数抓取今日热榜数据,并将数据保存到data变量中。接下来,我们使用save函数将data变量中的数据存入数据库。
总结
本攻略介绍了如何使用Python基于多线程实现抓取数据并存入数据库。我们需要创建一个数据库和一个数据表,使用requests库发送HTTP请求并使用BeautifulSoup库解析HTML页面,使用Python多线程并发抓取数据并将抓取的数据存入数据库。提供了两个示例代码,演示如何抓取今日热榜数据并打印,以及抓取今日热榜数据并存入MySQL数据库。这些示例代码可以助我们更好地理解如何使用Python基于多线程实现抓取数据并存入数据库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于多线程实现抓取数据存入数据库的方法 - Python技术站