爬取数据保存到数据库
请问各位大佬,我的这个代码怎么保存不到数据库import re
import pymysql
import requests
import logging
from urllib.parse import urljoin
from pyquery import PyQuery as pq
index_url = 'https://www.ygdy8.net/html/gndy/china/list_4_{}.html'
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
}
PAGE = 3
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s: %(message)s')
#发起请求
def scrape_page(url):
logging.info('正在爬取:{}...'.format(url))
try:
response = requests.get(url=url,headers=header)
response.encoding = 'gbk'
if response.status_code == 200:
return response.text
logging.error('出现错误,爬取代码:{}'.format(response.status_code))
except requests.RequestException:
logging.error('爬取{}出现错误'.format(url))
#拼接url并发起请求
def scrape_index(page):
url = index_url.format(page)
return scrape_page(url)
#解析详情页url
def detail_url(index_html):
details_url = []
doc = pq(index_html)
hrefs = doc('td b a:nth-child(2)').items()
for href in hrefs:
urls = href.attr('href')
url = urljoin(index_url, urls)
details_url.append(url)
return details_url
#详情页发起请求
def scrpae_detail(url):
return scrape_page(url)
#解析详情页
def parse_detail(html):
doc = pq(html)
brs = doc('#Zoom').text().replace('\n','')
name_pattern = re.compile('◎译 名(.*?)◎', re.S)
category_pattern = re.compile('◎类 别(.*?)◎', re.S)
score_pattern = re.compile('◎豆瓣评分(.*?)/10', re.S)
actor_pattern = re.compile('◎(?:演 员|主 演)(.*?)◎', re.S)
dram_pattern = re.compile('◎简 介(.*?)点击下载', re.S)
name = re.search(name_pattern, brs).group(1).strip()
category = re.search(category_pattern, brs).group(1).strip()
score = re.search(score_pattern, brs).group(1).strip() if re.search(score_pattern, brs) else None
actor = re.search(actor_pattern, brs).group(1).strip()
dram = re.search(dram_pattern, brs).group(1)
return {
'名称':name,
'类别':category,
'豆瓣评分':score,
'演员':actor,
'简介':dram
}
def save_data(data):
db = pymysql.connect(
host='127.0.0.1',
user='root',
password='123456a',
port=3306,
db= 'movies'
)
#建立游标
cursor = db.cursor()
sql = 'INSERT INTO movie (name,category,score,actor,dram) values (%s,%s,%s,%s,%s,)'
cursor.execute(sql,(data['名称'],data['类别'],data['豆瓣评分'],data['演员'],data['简介']))
db.commit()
db.close()
def main():
for page in range(1,2):
index_html = scrape_index(page)
hrefs = detail_url(index_html)
# logging.info('detail_url:{}'.format(list(href)))
for href in hrefs:
detail_html = scrpae_detail(href)
data = parse_detail(detail_html)
# print(data['名称'])
save_data(data)
# logging.info('{}'.format(dict(data)))
logging.info('保存成功')
if __name__ == '__main__':
main()
这是错误信息
根据您提供的代码和错误信息,可能出现了以下问题:
1. 导入模块错误:您在代码开头导入了re、pymysql、requests等模块,但并未安装相应的依赖包。请确保您已经使用pip安装了这些包。例如,可以通过运行以下命令来安装pymysql和requests:
python
pip install pymysql requests
2. 数据库连接问题:在save_data函数中,您指定了数据库的主机、用户名、密码等信息。请确保这些信息正确,并且您已经在本地安装了MySQL数据库,并且数据库名为'movies'。如果您的数据库设置有特殊要求,请根据实际情况进行修改。
3. SQL语法错误:在执行SQL插入语句时,在VALUES子句的最后缺少了一个占位符%s。请将以下行:
python
sql = 'INSERT INTO movie (name,category,score,actor,dram) values (%s,%s,%s,%s,%s,)'
修改为:
python
sql = 'INSERT INTO movie (name,category,score,actor,dram) values (%s,%s,%s,%s,%s)'
4. 数据类型匹配问题:在调用cursor.execute()方法执行SQL插入语句时,将data字典作为参数传递时,你多传入了一个逗号,这可能导致数据类型不匹配。请将以下行:
python
cursor.execute(sql, (data['名称'], data['类别'], data['豆瓣评分'], data['演员'], data['简介']))
修改为:
python
cursor.execute(sql, (data['名称'], data['类别'], data['豆瓣评分'], data['演员'], data['简介']))
请注意,这只是可能出现的问题之一。如果您仍然遇到错误,请提供完整的错误信息,以便更好地帮助您解决问题。 根据您提供的代码和错误信息,看起来您的代码在保存数据到数据库时出现了问题。具体来说,您在SQL语句中的VALUES子句中有一个逗号多余的问题。在这里,您不需要在VALUES子句的末尾添加逗号。另外,还有一些其他的问题需要注意。
请将以下代码替换您的save_data函数中的代码:
def save_data(data):
db = pymysql.connect(
host='127.0.0.1',
user='root',
password='123456a',
port=3306,
db='movies'
)
#建立游标
cursor = db.cursor()
sql = 'INSERT INTO movie (name,category,score,actor,dram) values (%s,%s,%s,%s,%s)'
cursor.execute(sql,(data['名称'],data['类别'],data['豆瓣评分'],data['演员'],data['简介']))
db.commit()
db.close()
这样,您的数据应该能够成功保存到数据库中了。
希望能对您有所帮助!如果您还有其他问题,请随时提问。 2楼:58秒
3楼:58秒
。 isdkz 发表于 2023-7-6 13:14
根据您提供的代码和错误信息,看起来您的代码在保存数据到数据库时出现了问题。具体来说,您在SQL语句中的V ...
好的,感谢感谢 陶远航 发表于 2023-7-6 13:14
根据您提供的代码和错误信息,可能出现了以下问题:
1. 导入模块错误:您在代码开头导入了re、pymysql、re ...
好的,感谢感谢 sfqxx 发表于 2023-7-6 13:15
2楼:58秒
3楼:58秒
。
我们只剩两种选择了,一种是不理睬,一种是脚本 歌者文明清理员 发表于 2023-7-6 13:23
我们只剩两种选择了,一种是不理睬,一种是脚本
对于我自己来说,还有一种选择,就是摆烂 liuhongrun2022 发表于 2023-7-6 13:29
对于我自己来说,还有一种选择,就是摆烂
现在不理睬就等于摆烂 歌者文明清理员 发表于 2023-7-6 13:29
现在不理睬就等于摆烂
我很疑惑,为什么以前你用脚本,现在你为什么抵制脚本又抵制GPT? 歌者文明清理员 发表于 2023-7-6 13:23
我们只剩两种选择了,一种是不理睬,一种是脚本
{:10_269:}
页:
[1]