python爬取数据并保存到数据库中(第一次练手完整代码),python爬取网页数据代码,  1.首先,下载需


  1.首先,下载需要的模块requests,BeautifulSoup,datetime,pymysql(注意,因为我用的python3.7,不支持mysqldb了),具体的下载方法有pip下载,或者使用Anaconda版本python的童鞋可以使用conda下载。

  2.创建conndb,py,包含数据库的连接断开,增删改查等操作:

#!/usr/bin/env python # -*- coding:utf-8 -*-import pymysqldef conn_db():  # 连接数据库函数    conn = pymysql.connect(        host=‘localhost‘,        user=‘数据库用户名‘,        passwd=‘数据库密码‘,        db=‘数据库名称‘,        charset=‘utf8‘)    cur = conn.cursor()    return conn, curdef exe_update(cur, sql):  # 更新语句,可执行update,insert语句    sta = cur.execute(sql)    return stadef exe_delete(cur, ids):  # 删除语句,可批量删除    for eachID in ids.split(‘ ‘):        sta = cur.execute(‘delete from cms where id =%d‘ % int(eachID))    return stadef exe_query(cur, sql):  # 查询语句    cur.execute(sql)    return curdef exe_commit(cur):    cur.connection.commit()  # 执行commit操作,插入语句才能生效def conn_close(conn, cur):  # 关闭所有连接    cur.close()    conn.close()

  3.创建另一个python文件,用于抓取数据(注意引入conndb.py文件):

#!/usr/bin/env python # -*- coding:utf-8 -*-import requestsfrom bs4 import BeautifulSoupimport datetimeimport conndbdef get_html_text(url):    try:        r = requests.get(url, timeout=30)        # r.encoding = r.apparent_encoding        r.encoding = ‘utf-8‘    # 编码方式        # print(r.text)        return r.text    except BaseException as e:        print(‘BaseException:‘, e)        return ""def get_content(url):    html = get_html_text(url)    # print(html)    soup = BeautifulSoup(html, ‘html.parser‘)    title = soup.select(".list-point > .item")  # 此处为BeautifulSoup的CSS选择器,括号内为通过类名选择    today = datetime.datetime.now().strftime(‘%Y-%m-%d‘)    # 获取今天的日期,用于抓取新闻时判断抓取今天的内容    for item in title:        time = item.find(‘span‘).string             # 新闻创建日期        time1 = ‘20‘ + time[0: time.index(" ")]     # 日期字符串格式处理,便于比较        if time1 == today:  # 新闻的创建日期是今天            url = item.find(‘a‘)[‘href‘]            # 获取单条新闻链接,用户单条新闻抓取            title = item.find(‘a‘).string            # print(title + time + url)            get_new_content(url, title, time)def get_new_content(url, title, tim1):    html = get_html_text(url)    # print(html)    soup = BeautifulSoup(html, ‘html.parser‘)    p = soup.select(".article-content > p")    # print(p)    # for item in p:    #     if item.find(‘img‘):    #         print(item.find(‘img‘)[‘src‘])    #     else:    #         print(item.string)    # 调用更新记录的函数    p_str = str(p)      # p为标签,要转化为字符串,并去掉前后的[]符号    length = len(p_str)    utf8_length = len(p_str.encode(‘utf-8‘))    length = (utf8_length - length) / 2 + length    p_str = p_str[1: int(length)]    tim2 = datetime.datetime.strptime(‘20‘ + tim1, ‘%Y-%m-%d %H:%M‘)    # 将字符串格式的日期转为数据库要求的datetime    sta = conndb.exe_update(cur,                            "insert into cms(title, content, gmt_create) "                            "values(‘%s‘,‘%s‘,‘%s‘)" % (title, p_str, tim2))    if sta == 1:        print(‘插入成功‘)    else:        print(‘插入失败‘)def main():    url = "抓取的页面url"    get_content(url)# 调用连接数据库的函数conn, cur = conndb.conn_db()main()conndb.exe_commit(cur)    # 注意!! 一定要记得commit,否则操作成功了,但是并没有添加到数据库中conndb.conn_close(conn, cur)

  这样,抓取到的数据就可以保存到数据库中了。

python爬取数据并保存到数据库中(第一次练手完整代码)

评论关闭