爬取豆瓣某本书的评论,并保存到数据库。可以结合前面发表的文章一起使用。组成某本书的详细信息。
from requests_html import HTMLSession
import re
import time
from bs4 import BeautifulSoup
import pymysql
def get_txt(num_ye, num_book):
"""
爬取数据
:param num_ye: 爬取多少页的评论
:param num_book: 爬取书的编号
:return:
"""
session = HTMLSession()
headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 OPR/66.0.3515.115'}
for start in range(1, num_ye + 1):
url = 'https://book.douban.com/subject/' + str(num_book) + '/reviews/?start=' + str(start * 10)
r = session.get(url, headers=headers, verify=False)
s = re.findall('https://book.douban.com/review/\\d+', r.text, flags=0)
# 获取到的url地址去重
s = set(s)
for x in s:
r_xiangqing = session.get(str(x), headers=headers, verify=False)
html = r_xiangqing.text
bs = BeautifulSoup(html)
# 评论内容
for tag in bs.find_all('div', class_='review-content clearfix'):
insert_data(tag.get_text())
time.sleep(1)
# 关闭数据库连接
close_mysql()
def connect_mysql():
global conn
# 打开数据库连接 IP 用户名 密码 库名
conn = pymysql.connect('localhost', 'root', '123456', 'shuping')
def insert_data(data=''):
# 使用cursor()方法创建一个游标对象
cursor = conn.cursor()
# SQL语句:向数据表中插入数据
sql = """insert into doubanbook(comments) value(%s)"""
# 异常处理
try:
# 执行SQL语句
cursor.execute(sql, (data))
# 提交事务到数据库执行
conn.commit() # 事务是访问和更新数据库的一个程序执行单元
except:
# 如果发生错误则执行回滚操作
conn.rollback()
def close_mysql():
# 关闭数据库连接
conn.close()
if __name__ == '__main__':
connect_mysql()
# 每页数据共20条
get_txt(10, 25862578)
结果: