python爬取新闻数据信息并加进数据库_python爬取数据并保存到数据库中(第一次练手完整代码)...

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

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

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import pymysql

def conn_db(): # 连接数据库函数

conn = pymysql.connect(

host=‘localhost‘,

user=‘数据库用户名‘,

passwd=‘数据库密码‘,

db=‘数据库名称‘,

charset=‘utf8‘)

cur = conn.cursor()

return conn, cur

def exe_update(cur, sql): # 更新语句,可执行update,insert语句

sta = cur.execute(sql)

return sta

def exe_delete(cur, ids): # 删除语句,可批量删除

for eachID in ids.split(‘ ‘):

sta = cur.execute(‘delete from cms where id =%d‘ % int(eachID))

return sta

def exe_query(cur, sql): # 查询语句

cur.execute(sql)

return cur

def 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 requests

from bs4 import BeautifulSoup

import datetime

import conndb

def 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)

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

原文:https://www.cnblogs.com/sakurayj/p/10156056.html

你可能感兴趣的:(python爬取新闻数据信息并加进数据库_python爬取数据并保存到数据库中(第一次练手完整代码)...)