|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请问各位大佬,我的这个代码怎么保存不到数据库
- 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['简介']))
复制代码
请注意,这只是可能出现的问题之一。如果您仍然遇到错误,请提供完整的错误信息,以便更好地帮助您解决问题。
|
-
|