前言:

之前学习了用python爬虫的基本知识,现在计划用爬虫去做一些实际的数据统计功能。由于前段时间演员的诞生带火了几个年轻的实力派演员,想用爬虫程序搜索某论坛中对于某些演员的讨论热度,并按照日期统计每天的讨论量。

这个项目总共分为两步:

1.获取所有帖子的链接:

将最近一个月内的帖子链接保存到数组中

2.从回帖中搜索演员名字:

从数组中打开链接,翻出该链接的所有回帖,在回帖中查找演员的名字

获取所有帖子的链接:

搜索的范围依然是以虎扑影视区为界限。虎扑影视区一天约5000个回帖,一月下来超过15万回帖,作为样本来说也不算小,有一定的参考价值。

完成这一步骤,主要分为以下几步:

1.获取当前日期

2.获取30天前的日期

3.记录从第一页往后翻的所有发帖链接

1.获取当前日期

这里我们用到了datetime模块。使用datetime.datetime.now(),可以获取当前的日期信息以及时间信息。在这个项目中,只需要用到日期信息就好。

2.获取30天前的日期

用datetime模块的优点在于,它还有一个很好用的函数叫做timedelta,可以自行计算时间差。当给定参数days=30时,就会生成30天的时间差,再用当前日期减去delta,可以得到30天前的日期,将该日期保存为startday,即开始进行统计的日期。不然计算时间差需要自行考虑跨年闰年等因素,要通过一个较为复杂的函数才可以完成。

today = datetime.datetime.now()

delta = datetime.timedelta(days=30)

i = "%s" %(today - delta)

startday = i.split(' ')[0]

today = "%s" %today

today = today.split(' ')[0]

在获得开始日期与结束日期后,由于依然需要记录每一天每个人的讨论数,根据这两个日期生成两个字典,分别为actor1_dict与actor2_dict。字典以日期为key,以当日讨论数目作为value,便于每次新增查找记录时更新对应的value值。

strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime

days = (strptime(today, "%Y-%m-%d") - strptime(startday, "%Y-%m-%d")).days

for i in range(days+1):

temp = strftime(strptime(startday, "%Y-%m-%d") + datetime.timedelta(i), "%Y-%m-%d")

actor1_dict[temp] = 0

actor2_dict[temp] = 0

3.记录从第一页往后翻的所有发帖链接

​如图1所示,采用发帖顺序排列,可以得到所有的发帖时间(精确到分钟)。右键并点击查看网页源代码,可以发现当前帖子的链接页面,用正则表达式的方式抓取链接。

首先依然是获取30天前的日期,再抓取第i页的源代码,用正则表达式去匹配,获取网页链接和发帖时间。如图2所示:

比较发帖时间,如果小于30天前的日期,则获取发帖链接结束,返回当前拿到的链接数组,代码如下

def all_movie_post(ori_url):

i = datetime.datetime.now()

delta = datetime.timedelta(days=30)

i = "%s" %(i - delta)

day = i.split(' ')[0] # 获得30天前的日子

print day

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

headers = { 'User-Agent' : user_agent }

post_list = []

for i in range(1,100):

request = urllib2.Request(ori_url + '-{}'.format(i),headers = headers)

response = urllib2.urlopen(request)

content = response.read().decode('utf-8')

pattern = re.compile('.*?(.*?)', re.S)

items = re.findall(pattern,content)

for item in items:

if item[1] == '2011-09-16':

continue

if item[1] > day: #如果是30天内的帖子,保存

post_list.append('https://bbs.hupu.com' + item[0])

else: #如果已经超过30天了,就直接返回

return post_list

return post_list

函数的传参是链接首页,在函数中修改页码,并继续搜索。

从回帖中搜索演员名字:

接下来的步骤也是通过一个函数来解决。函数的传参包括上一步中得到的链接数组,已经想要查询的演员名字(这个功能可以进一步扩展,将演员名字也用列表的形式传输,同时上一步生成的字典也可以多一些)。

由于虎扑论坛会将一些得到认可的回帖摆在前端,即重复出现。如图3所示:

​为了避免重复统计,将这些重复先去除,代码如下:

if i == 0:

index = content.find('更多亮了的回帖')

if index >= 0:

content = content[index:]

else:

index = content.find('我要推荐')

content = content[index:]

去除的规则其实并不重要,因为每个论坛都有自己的格式,只要能搞清楚源代码中是怎么写的,剩下的操作就可以自己根据规则进行。

每个回帖格式大致如图4,

用对应的正则表达式再去匹配,找到每个帖子每一个回帖的内容,在内容中搜索演员名字,即一开始的actor_1与actor_2,如果搜到,则在对应回帖日期下+1。

最终将两位演员名字出现频率返回,按日期记录的字典由于是全局变量,不需要返回。

web_str = '(.*?) .*?.*?

(.*?)
' #找到回帖内容的正则

pattern = re.compile(web_str, re.S)

items = re.findall(pattern,content)

for item in items:

#if '引用' in item: #如果引用别人的回帖,则去除引用部分

#try:

#item = item.split('')[1]

#except:

#print item

#print item.decode('utf-8')

if actor_1 in item[1]:

actor1_dict[item[0]] += 1

actor_1_freq += 1

if actor_2 in item[1]:

actor2_dict[item[0]] += 1

actor_2_freq += 1

至此,我们就利用爬虫知识,成功完成对论坛关键字的频率搜索了。

这只是一个例子,关键字可以任意,这也不只是一个针对演员的诞生而写的程序。将演员名字换成其他词,就可以做到类似“您的年度关键字”这样的结果,根据频率大小来显示文字大小。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python爬取论坛付费内容_Python爬虫抓取论坛关键字过程解析相关推荐

  1. python爬今日头条组图_python 爬虫抓取今日头条街拍图片

    1. 打开google浏览器,输入www.toutiao.com, 搜索街拍.html 2.打开开发者选项,network监看加载的xhr, 数据是ajax异步加载的,能够看到preview里面的da ...

  2. python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...

    python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07

  3. python爬取贴吧数据_Python爬虫——抓取贴吧帖子

    原博文 2016-11-13 23:13 − 抓取百度贴吧帖子 按照这个学习教程,一步一步写出来,中间遇到很多的问题,一一列举 首先, 获得 标题 和 贴子总数 # -*- coding:utf-8 ...

  4. python爬取文本中的成语_python正则表达式抓取成语网站

    #anthor jiqunpeng #time 20121124 import urllib import re def getHtml(url): #从URL中读取html内容 page = url ...

  5. python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  6. python爬网站数据实例-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  7. python爬取论坛付费内容_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...

  8. python爬虫爬取股票软件数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转载)...

    完整代码 实际上,整个事情完成了两个相对独立的过程:1.爬虫获取网页股票数据并保存到本地文件:2.将本地文件数据储存到MySQL数据库.并没有直接的考虑把从网页上抓取到的数据实时(或者通过一个临时文件 ...

  9. python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

最新文章

  1. RSA解密时javax.crypto.BadPaddingException: Data must start with zero
  2. 【Android基础】RecyclerView的设计艺术
  3. android:windowSoftInputMode属性
  4. 牛客网 二叉树的层序遍历
  5. 提取javadoc_使用JavaParser从源文件中提取JavaDoc文档
  6. Astyle 一键格式化项目代码
  7. idea+springboot+mongodb的实战使用分享
  8. 经验 | 在C++平台上部署PyTorch模型流程+踩坑实录
  9. 5-1 可维护性的度量和构造原则
  10. android微信第三方登录怎么通过code获取openid?
  11. 【机器学习】Tensorflow基本使用
  12. selenium原理
  13. AutoResetEvent和ManualResetEvent用法
  14. 数据分析师出品丨采购周报模板
  15. 教师资格证科目一的法律重点总结
  16. php写的公告栏代码,可爱的公告栏代码
  17. Improved 3D Object Detector Under Snowfall Weather Condition Based on LiDAR Point Cloud
  18. 为什么和平精英一直显示无法连接到服务器,和平精英无法连接到服务器解决办法...
  19. 11.elasticsearch认证考试总结
  20. linux内核原子操作使用简介

热门文章

  1. .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇
  2. 构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)
  3. LeetCode之Ransom Note
  4. 三、界面介绍(IVX快速手册)
  5. 《零基础看得懂的C语言入门教程 》——(六)轻轻松松了解C语言的逻辑运算
  6. 幼儿园调查过程怎么写_深圳全托幼儿园哪个好 幼儿园寄宿怎么报名
  7. d类功放芯片_应用于无滤波级D类音频功放的新型死区时间控制系统
  8. 高考610考哪个计算机学校,2019年高考成绩610分_615分左右能报考上什么学校 文科理科大学名单推荐...
  9. 下载matlab安装包太慢_MATLAB 2020a商业数学中文版软件下载安装教程
  10. python获取键盘事件_50-用Python监听鼠标和键盘事件