python爬取豆瓣TOP250并保存到Mysql中

代码

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import pymysql
import requests
from bs4 import BeautifulSoup
import lxml

def createDB():
    # 创建数据库
    print("创建数据库doubantop250...")
    try:
        conn = pymysql.connect(host="localhost",
                               port=3306,
                               user="用户名",
                               password="密码",
                               charset="utf8")
        cur = conn.cursor()
        createSql = "create database if not exists doubanTop250 default charset utf8"
        cur.execute(createSql)
        conn.commit()
        print("创建成功")
    except pymysql.Error as e:
        print("pymysql Error: ", e.args[0], e.args[1])
    finally:
        cur.close()
        conn.close()

def createTable():
    # 创建电影表
    print("创建表...")
    try:
        conn = pymysql.connect(host="localhost",
                               port=3306,
                               user="用户名",
                               password="密码",
                               db="doubanTop250",
                               charset="utf8")
        cur = conn.cursor()
        createSql = "create table movie(" \
                    " title varchar(50)," \
                    " score varchar(5)," \
                    " comment varchar(100)) default character set utf8;"
        cur.execute(createSql)
        conn.commit()
        print("创建成功...")
    except pymysql.Error as e:
        print("pymysql Error: ", e.args[0], e.args[1])
    finally:
        cur.close()
        conn.close()

def spider():
    try:
        start = 0
        conn = pymysql.connect(host="localhost",
                               port=3306,
                               user="用户名",
                               password="密码",
                               db="doubantop250",
                               charset="utf8")
        cur = conn.cursor()
        sql = "insert into movie (title,score,comment) values ('%s', '%s' ,'%s');"
        while start < 250:
            print("开始插入第%d部到第%d部电影到数据库中..." % (start, start + 25))
            r = requests.get("https://movie.douban.com/top250?start=" + str(start) + "&filter=")
            el = BeautifulSoup(r.content, "xml", from_encoding="utf-8")
            r.close()
            items = el.find_all("div", class_="item")

            for item in items:
                title = item.find_all(class_="title", limit=1)[0].get_text()
                rating_num = item.find_all('span', class_="rating_num", limit=1)[0].get_text()
                comment = item.find_all('span', class_="inq", limit=1)
                commentStr = ""
                if len(comment) > 0:
                    commentStr = comment[0].get_text().replace("'", " ")
                data = (title, rating_num, commentStr)
                cur.execute(sql % data)
            print("成功插入第%d部到第%d部电影到数据库中" % (start, start+25))
            start += 25
            conn.commit()
        print("完成!!")
    except Exception as e:
        print("Error: ", e.args[0], e.args[1])
    finally:
        conn.close()
        cur.close()

def main():
    # createDB()
    createTable()
    spider()

if __name__ == '__main__':
    main()

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值