Python爬虫之糗事百科段子写入MySQL数据库
在《Python爬取糗事百科段子》这篇文章中,我们获取到了每一个段子的内容(content)、作者(auth)、作者主页(home)、点赞数(votes)、评论数(comments)、段子地址(content_href)等信息,现在我们只需要根据以上字段名,创建数据库表,将信息逐条写入数据库就可以了。上代码!
# _*_ coding:utf-8 _*_
import requests
from bs4 import BeautifulSoup
import MySQLdb
import re
connect=MySQLdb.connect(host="localhost",user='root',passwd='',port=3306,charset='utf8')
cursor=connect.cursor()
def create_sql(cursor=cursor):
#用于创建数据库
sql='create database if not exists qiushibaike default charset=utf8'
cursor.execute(sql)
print u'创建数据库'
sql='use qiushibaike'
cursor.execute(sql)
sql='''create table if not exists info(
id int not null primary key auto_increment,
content varchar(500) not null ,
auth varchar(20) not null ,
votes int not null,
comms int not null,
home varchar(50) not null ,
content_href varchar(50) not null )
default charset=utf8
'''
cursor.execute(sql)
print u'创建数据表'
defget_content(url,connect=connect,cursor=cursor):
#用于获取段子信息,并将信息写入数据库
sql='use qiushibaike'
cursor.execute(sql)
print u'选择qiushibaike 数据库'
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
#url='https://www.qiushibaike.com/8hr/page/2/'
html=requests.get(url,headers=headers).content
soup=BeautifulSoup(html,'lxml')
div=soup.find_all('div',attrs={'class':'article block untagged mb15'})
#获取段子所在的标签块
for item in div:
auth=item.find('h2').get_text()
print auth
#获取作者信息
home=item.find('a')['href']
home='https://www.qiushibaike.com/'+home
print home
#作者主页
content_href=item.find('a',attrs={'class':'contentHerf'})['href']
content_href='https://www.qiushibaike.com/'+content_href
print content_href
#段子页面
content=item.find('div',attrs={'class':'content'})
span=content.find('span').get_text()
print span
#获取段子内容
stats=item.find('div',attrs={'class':'stats'}).get_text().replace(' ','')
print stats
#获取评论数、点赞数
ss=re.findall('d+',stats)
if ss:
votes=ss[0]
comms=ss[1]
else:
votes=0
comms=0
print votes,comms
#点赞数、评论数
sql='insert into info (content,auth,votes,comms,home,content_href )values("%s","%s","%s","%s","%s","%s")'%(span,auth,votes,comms,home,content_href)
#print sql
try:
cursor.execute(sql)
print u'正在向数据库插入数据'
connect.commit()
except Exception,e:
print u'发生异常',Exception,e
##捕捉异常信息,有的字段中有特殊符号,会导致数据写入数据库失败
## raw_input(u'按enter键浏览下一条')
## print ' '
## ##边看段子,边将数据写入数据库。可以注释掉
def main():
create_sql()
n=0
while n<30:
#这里只抓取10页,可根据需要设置n值
n=n+1
page=str(n)
print u'正在获取第%s页'%(page)
url='https://www.qiushibaike.com/8hr/page/%s/'%(page)
#print url
#抓取第n页的段子
get_content(url)
if __name__ =='__main__':
main()
源码 群 960410445
运行程序,我们就可以在数据库中看到所有的段子了。之所以写入数据库,是便于以后更好的使用这些数据。比如找出点赞数大于5000的段子,根据段子手发的段子数以及其点赞数、评论数,分析谁是最热的段子手,等等诸如此类的统计分析。当然还会有更有用的地方,这个我们以后会讲到!