import requests import re import pymysql def save_sql(content): con = pymysql.connect( host='localhost', port='3306', user='root', password='123456', db='test' ) db = con.cursor() sql = f'insert into danmu values (content)' db.execute(sql) # 数据库执行sql con.commit() db.close() con.close() url="https://api.bilibili.com/x/v1/dm/list.so?oid=1147917986" headers={ 'referer':'https://www.bilibili.com/', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.37' } response=requests.get(url=url,headers=headers) #解决网页数据乱码 response.encoding = 'utf-8' print(response.text) content_list=re.findall('<d p=".*?">(.*?)</d>',response.text) print(content_list) #for 循环遍历弹幕 for content in content_list: with open('弹幕.text', mode='a', encoding='utf-8') as f: f.write(content) f.write('\n') print(content) save_sql(content)
时间: 2024-03-15 15:43:11 浏览: 82
这段代码是一个从B站获取弹幕并保存到MySQL数据库中的程序。程序先使用requests库从B站获取指定视频的弹幕信息,然后使用正则表达式从返回的数据中提取出所有的弹幕文本内容。接着,程序使用for循环遍历所有的弹幕,并将每条弹幕分别写入文件和MySQL数据库中。
其中,save_sql函数是用于将弹幕保存到MySQL数据库的函数。在函数中,程序使用pymysql库连接到指定的MySQL数据库,并执行一条INSERT语句将弹幕文本内容插入到指定的数据表中。
需要注意的是,如果您需要运行这段代码,需要安装requests库和pymysql库。另外,您需要将代码中的数据库连接信息修改为您自己的数据库连接信息。
相关问题
解析下列代码:import requests import re from lxml import etree import pymysql import time from multiprocessing import Pool class MysqlClass: def __init__(self,user,password,db): self.db = pymysql.connect(user=user,password=password,db=db) self.cursor = self.db.cursor() def insert_tasks(self,task_url): sql = 'insert into tasks(task_url,status) values("{}","0")'.format(task_url) self.cursor.execute(sql) self.db.commit() def get_task_url(self): sql = 'select task_url from tasks where status="0"' self.cursor.execute(sql) result = self.cursor.fetchone() if result: result = result[0] sql = 'update tasks set status="1" where task_url="{}"'.format(result) self.cursor.execute(sql) self.db.commit() return result def get_task_url_count(self): sql = 'select count(*) from tasks where status="0"' self.cursor.execute(sql) num = self.cursor.fetchone()[0] return num def status_finish(self,task_url): sql = 'update tasks set status="2" where task_url="{}"'.format(task_url) print(sql) self.cursor.execute(sql) self.db.commit() def insert_info(self,table_name,**kwargs): sql = 'insert into {}('.format(table_name)+','.join(kwargs.keys())+') values('+','.join(map(lambda x:'"'+str(x)+'"',kwargs.values()))+')' self.cursor.execute(sql) self.db.commit() def get_book_type_id(self,key): sql = 'select id from book_type where tname like "{}%"'.format(key) self.cursor.execute(sql) result = self.cursor.fetchone()[0] return result
这段代码定义了一个MysqlClass类,用于连接数据库并执行一些操作。其中包括以下方法:
- `__init__`方法:初始化数据库连接和游标
- `insert_tasks`方法:向数据库中的"tasks"表中插入一条记录,包括任务链接和状态
- `get_task_url`方法:从"tasks"表中获取一个状态为"0"的任务链接,并将该记录的状态修改为"1"
- `get_task_url_count`方法:获取"tasks"表中状态为"0"的记录数量
- `status_finish`方法:将指定链接在"tasks"表中的状态修改为"2"
- `insert_info`方法:向指定表中插入一条记录,参数为表名和键值对(字段和对应的值)
- `get_book_type_id`方法:根据关键词在"book_type"表中查询满足条件的记录的id
此外,代码还导入了requests、re、etree、pymysql、time和multiprocessing模块。其中requests用于发送HTTP请求,re用于正则表达式匹配,etree用于解析HTML,pymysql用于操作MySQL数据库,time用于时间相关操作,multiprocessing用于多进程处理。
def get_mnnu_text(url): response = requests.get(url) soup = BeautifulSoup(response.content.decode('utf-8'), 'html.parser') content = soup.find_all('p') text = '\n'.join([p.get_text() for p in content]) 返回文本 URL = 'http://www.mnnu.edu.cn/' 文本 = get_mnnu_text(URL) 打印(文本) def save_to_navicat(text): connection = pymysql.connect( host='localhost', user='root', password='root', database='pa', charset='utf8' ) try: 使用connection.cursor()作为光标: SQL = “INSERT INTO () VALUES (%S)” encoded_text = TEXT.ENCODE('UTF8') cursor.execute(sql, (encoded_text,)) connection.commit() 最后: connection.close() save_to_navicat(text),我要修改url为 https://movie.douban.com/subject/30391186/comments?status=P
好的,你可以按照以下方式修改代码:
```python
import requests
from bs4 import BeautifulSoup
import pymysql
def get_movie_comments(url):
response = requests.get(url)
soup = BeautifulSoup(response.content.decode('utf-8'), 'html.parser')
content = soup.find_all('span', class_='short')
comments = '\n'.join([c.get_text() for c in content])
return comments
url = 'https://movie.douban.com/subject/30391186/comments?status=P'
comments = get_movie_comments(url)
def save_to_navicat(text):
connection = pymysql.connect(
host='localhost',
user='root',
password='root',
database='pa',
charset='utf8'
)
try:
with connection.cursor() as cursor:
sql = "INSERT INTO `my_table` (`content`) VALUES (%s)"
encoded_text = text.encode('utf8')
cursor.execute(sql, (encoded_text,))
connection.commit()
finally:
connection.close()
save_to_navicat(comments)
```
这样就可以获取豆瓣电影《误杀》的所有评论并保存到数据库中了。
阅读全文
相关推荐
















