一、获取URL
1.打开目标网页
2.打开浏览器的开发者工具(右键-> "检查")
3.切换到 "网络"选项卡
4.随便复制一条评论,在筛选器中查找(可Ctrl+R刷新)
5.“标头”里的“常规URL”即为所需URL
二、导入MySQL
1.win+r,激活虚拟环境(激活成功前面会出现(venv) )
venv\Scripts\activate
2.在虚拟环境里安装pymysql
(venv) C:\Users\17378>pip install pymysql
3.可能需要安装 mysql-connector-python
模块
(venv) C:\Users\17378>pip install mysql-connector-python
三、查看 MySQL 中存储的内容
1.win+r打开命令行或终端窗口。
2.使用以下命令登录到 MySQL:
mysql -u root -p
3.然后输入你的 MySQL 密码。
4.切换到你的数据库(jd
):
USE jd;
5.执行查询语句查看 comments
表中的内容:
SELECT * FROM comments;
ps.也可以直接打开MySQL Workbench查看
四、完整代码
import pymysql# 用于与MySQL数据库交互的Python模块
import requests# 用于发起HTTP请求
import time# 引入延迟
host = 'localhost'
user = 'root'
password = '111111'
database = 'jd'
# 创建 'comments' 表
create_table_sql = '''
CREATE TABLE IF NOT EXISTS comments (
id VARCHAR(255) PRIMARY KEY,
content TEXT,
time DATETIME
);
'''
try:
# 连接数据库
db = pymysql.connect(
host=host,
user=user,
password=password,
database=database,
charset='utf8mb4'
)
print('数据库连接成功')
time.sleep(4)
# 创建游标对象,执行SQL查询
cursor = db.cursor()
# 创建 'comments' 表
cursor.execute(create_table_sql)
print('comments表创建成功')
# 京东评论数据爬取
# 获取URL
base_url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1709530326349&loginType=3&uuid=181111935.17001439338431407324702.1700143934.1700143940.1709527371.3&productId=10082440400024&score=0&sortType=5&page='
# 爬取范围
for page in range(1, 5):
url = base_url + str(page) + '&pageSize=10&isShadowSku=0&fold=1&bbtf=&shield='
# 使用自定义标头向URL发送请求
# 设置请求头通常是为了模拟一个正常的浏览器请求,以避免被目标网站识别为爬虫而拒绝服务
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
# 请求网页信息
res = requests.get(url, headers=headers)
print(f'爬取第{page}页评论,状态码:{res.status_code}')
# 解析JSON响应并提取评论
if res.status_code == 200:
data = res.json()
comments = data['comments']
for comment in comments:
comment_id = comment['id']
comment_content = comment['content']
comment_time = comment['creationTime']
# 插入数据到 'comments' 表
insert_sql = "INSERT INTO comments (id, content, time) VALUES (%s, %s, %s)"
values = (comment_id, comment_content, comment_time)
try:
cursor.execute(insert_sql, values)
print(f'评论插入成功: {comment_content}')
except pymysql.Error as e:
print(f'评论插入失败: {str(e)}')
# 提交事务
db.commit()
except pymysql.Error as e:
print(f'数据库连接失败: {str(e)}')
finally:
# 关闭连接
if db:
db.close()