Python爬取微博热搜榜,将数据存入数据库

一直想学习用Python来进行数据的爬取,也一直想知道Python连接数据库的操作,今天刚好看到的这篇文章满足了这两个条件,我试着爬了下微博,并成功将数据添加到数据库中,颇为欢喜。作者写的很简单,有些过程省略掉了,因此我尝试了好几次才成功,接下来记录自己的成功操作。

一、选择需要爬取的网页

这里是用来爬取微博热搜榜的数据,网页地址为http://s.weibo.com/top/summary,打开网页并按下F12进入开发者模式,找到<td class = "td_05">...</td>里的内容,如图所示:




href后面的内容即为对应的中文编码的源码,其中很多25应该是干扰字符,后面删掉解析就可以发现是微博热搜的标题。我数了下,一共有27个,刚好第一个标题为“比伯愿为赛琳娜捐肾”九个字,一个汉字占三个字符,一共27个。

我用的是Python3.6.0,开发工具为PyCharm2017.2.3,数据库为MySql。

二、下面是完整代码

#-*-coding:utf-8-*-
import urllib, pymysql, requests, re
# 配置数据库
config = {
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': '******',
    'db': 'weibo',
    'charset': 'utf8',
}
# 链接数据库
conn = pymysql.connect(**config)
cursor = conn.cursor()
# 获取热搜源码
weiboHotFile = requests.get('http://s.weibo.com/top/summary')
weiboHotHtml = weiboHotFile.text
# 正则表达式匹配URL,找到title
hotKey = re.compile(r'td class=\\"td_05\\"><a href=\\"\\/weibo\\/(.*?)&Refer=top\\"')
hotKeyListBe = hotKey.findall(weiboHotHtml)
rank = 1
# 遍历获取的title列表
for title in hotKeyListBe:
    # 去除干扰数字
    title = title.replace('25', '')
    url = 'http://s.weibo.com/weibo/' + title
    title = urllib.parse.unquote(title)
    print(str(rank)+' '+title + ' '+' '+url+'\n')
    # 执行数据语句
    sql = 'insert into hotsearch (rank, daydate, mindate, title, url) values (%s, curdate(), curtime(), %s, %s)'
    cursor.execute(sql, (rank, title, url))
    rank += 1
    conn.commit()
cursor.close()
conn.close()


三、注意事项

这里要说明一下,数据库的连接,db是数据库的名称weibo(这个可以自己取名字),charset表示字符集为utf8,表的名称为hotsearch,里面有rank,daydate,mindate,title,url为表中的字段,作者未说明这些字段的定义,我自己定义如下:


对于varchar的类型,如果默认,则其编码模式为latin1,我刚开始不知道,运行py文件一直报错,然后网上搜索了一下,需要将latin1改为utf8,这样就对了。


最终可在数据库中查看导入成功的数据。


四、利用bat脚本运行py文件

当然,作者还写了利用bat直接运行py文件,这样更快些,我在网上查了下,也学会了:

1、找到.py对应所在的文件目录并记录下来,比如我的就是E:\***\pythonprojects\BlogSpider

2、创建一个txt文件,在文件中写入如下内容:

@echo off
cd E:\***\pythonprojects\BlogSpider

start python CrawlerBlog01.py

3、将txt文件改为bat后缀,然后双击运行即可。


五、参考链接:

https://blog.csdn.net/weixin_41407399/article/details/79775900

https://www.cnblogs.com/yingdiblog/p/7244228.html

http://s.weibo.com/top/summary






  • 14
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值