pymysql问题
代码如下:import requests
from pyquery import PyQuery
import pymysql
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="root",db="hsc")
cursor = conn.cursor()
headers ={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0"
}
for i in range(1,11):
res = requests.get(f"https://ssr1.scrape.center/page/{i}",headers=headers)
aaa = res.text
c = PyQuery(aaa)
aa = c.find("#index .el-row .el-col .el-card .el-card__body .el-row .el-col a .m-b-sm")
# for i in aa:
# print(i.text)
for i in range(1,101):
urls = f"https://ssr1.scrape.center/detail/{i}"
sqll = "insert into movies (names,linkss) value (%s,%s)"
cursor.executemany(sqll,[(i.text,),(urls,)])
conn.commit()
我爬取的页面是这个:https://ssr1.scrape.center/, 我想把电影名字和对应的链接保存到数据库中,但是死活不成功,有没有大佬帮忙看下问题出在哪里?谢谢。 问题分析和解决方案
主要存在以下三个问题:
1. 数据未提取:当前代码只获取了电影名称节点,但没有实际提取文本内容和对应链接
2. 参数缺失:executemany()缺少数据参数
3. URL生成逻辑错误:单独生成的100个链接与页面实际数据无关
修正后的代码:
import requests
from pyquery import PyQuery
import pymysql
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="root",
db="hsc",
charset='utf8mb4'# 必须添加字符集
)
cursor = conn.cursor()
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36"
}
# 存储数据的列表
data_list = []
for page in range(1, 11):
res = requests.get(f"https://ssr1.scrape.center/page/{page}", headers=headers)
html = PyQuery(res.text)
# 每个页面有10个电影项
items = html.find("#index > .el-row > .el-col")
for item in items.items():
name = item.find(".m-b-sm").text()
link = item.find("a").attr("href")# 提取相对链接
full_link = f"https://ssr1.scrape.center{link}"# 拼接完整链接
data_list.append((name, full_link))# 注意要用元组包裹
# 插入数据(注意字段名检查)
sql = "INSERT INTO movies (names, linkss) VALUES (%s, %s)"
cursor.executemany(sql, data_list)# 传入数据参数
conn.commit()
# 关闭连接
cursor.close()
conn.close()
关键修改说明:
[*]添加字符集参数 charset='utf8mb4' 防止中文乱码
[*]使用 .items() 方法遍历PyQuery对象
[*]通过 .attr("href") 提取链接属性
[*]使用列表 data_list 存储准备插入的数据
[*]executemany需要二维元组数据,每个元组对应一条记录
注意检查:
1. 确保数据库表 movies 存在且包含 names 和 linkss 字段
2. 字段类型建议:names VARCHAR(255),linkss VARCHAR(500)
3. 如果仍然失败,可在代码中添加 try-except 块捕获具体错误
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 电脑不在身边,我发现的错误:
1.应该写成User-Agent(首字母大写),而不是小写
2.urls只是一个字符串而不是包含多个字符串的列表/yuanzu 不明觉厉{:10_257:} player-none 发表于 2025-4-15 21:40
电脑不在身边,我发现的错误:
1.应该写成User-Agent(首字母大写),而不是小写
2.urls只是一个字符串而 ...
有修改建议吗 建议直接访问detail链接获取电影名即可
import requests
from pyquery import PyQuery
import pymysql
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="root",db="hsc")
cursor = conn.cursor()
headers ={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0"
}
dataList = []
for i in range(1,101):
url = f"https://ssr1.scrape.center/detail/{i}"
res = requests.get(url,headers=headers)
html = res.text
c = PyQuery(html)
movie_name = c.find("#detail .el-row .el-col .el-card .el-card__body .el-row .p-h a .m-b-sm").text
dataList.append((movie_name,url))
sqll = "insert into movies (names,linkss) value (%s,%s)"
cursor.executemany(sqll,dataList)
conn.commit() 本帖最后由 风雨3137 于 2025-4-18 08:47 编辑
发重复了…… python小小白哟 发表于 2025-4-16 10:30
有修改建议吗
import requests
from pyquery import PyQuery
import pymysql
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="root",db="hsc")
cursor = conn.cursor()
headers ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0"
}
texts=[]
urls=[]
for i in range(1,11):
res = requests.get(f"https://ssr1.scrape.center/page/{i}",headers=headers)
aaa = res.text
c = PyQuery(aaa)
aa = c.find("#index .el-row .el-col .el-card .el-card__body .el-row .el-col a .m-b-sm")
for j in aa:
texts.append(j.text)
for i in range(1,101):
urls.append(f"https://ssr1.scrape.center/detail/{i}")
sqll = "insert into movies (names,linkss) value (%s,%s)"
cursor.executemany(sqll,list(zip(texts,urls))
conn.commit()
python小小白哟 发表于 2025-4-16 10:30
有修改建议吗
不知道触发了什么,给你回复了,正在审核 python小小白哟 发表于 2025-4-16 10:30
有修改建议吗
修改建议审核通过了,你看看 player-none 发表于 2025-4-17 18:10
修改建议审核通过了,你看看
你好,运行成功了,但是有一个小疑问,cursor.executemany(sqll,list(zip(names,urls))) 这行代码,为什么用list把zip(names,urls)又转换成列表了呢? python小小白哟 发表于 2025-4-18 19:30
你好,运行成功了,但是有一个小疑问,cursor.executemany(sqll,list(zip(names,urls))) 这行代码,为 ...
zip功能:
[(0, 1, 2),
(3, 4, 5)]
zip后:
[(0, 3), (1, 4), (2, 5)]
记得list就行
给个最佳呗
页:
[1]