抓取jsp网页源代码(爬虫获取所有帖子的链接:虎扑影视区为界限 )

优采云 发布时间: 2022-01-23 05:13

  抓取jsp网页源代码(爬虫获取所有帖子的链接:虎扑影视区为界限

)

  前言:

  之前学过python爬虫的使用基础,现在打算用爬虫来做一些实际的数据统计功能。由于前段时间演员的诞生,几位年轻的实力派演员走红。我想用爬虫程序在某个论坛搜索某些演员的讨论,并按日期统计每日讨论量。

  这个项目分为两个步骤:

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

  将上个月内帖子的链接保存到数组中

  2.从回复中搜索演员姓名:

  从数组中打开链接,查找该链接的所有回复,在回复中查找演员的姓名

  获取所有帖子的链接:

  搜索范围仍仅限于虎扑影视领域。虎扑影视区一天回复5000条左右,一个月回复15万多条,作为样本不算太少,有一定的参考价值。

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

  1.获取当前日期

  2.获取 30 天前的日期

  3.记录从第一页返回的所有发帖链接

  1.获取当前日期

  这里我们使用 datetime 模块。使用 datetime.datetime.now() 获取当前日期和时间信息。在这个项目中,只需要日期信息。

  2.获取 30 天前的日期

  使用 datetime 模块的好处是它还有一个非常有用的函数叫做 timedelta,它可以自己计算时间差。给定参数days=30时,会产生30天的时间差,然后将当前日期减去delta得到30天前的日期,并将日期保存为startday,即开始统计。否则,时差的计算需要考虑闰年、闰年等因素,只能通过更复杂的函数来完成。

  今天 = datetime.datetime.now()

  delta = datetime.timedelta(days=30)

  i = "%s" %(今天 - 增量)

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

  今天=“%s”%今天

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

  得到开始日期和结束日期后,由于还需要记录每个人每天的讨论次数,所以根据这两个日期生成两个字典,即actor1_dict和actor2_dict。字典以日期为键,以当天的讨论次数为值,这样每次添加新的搜索记录时,都可以更新对应的值。

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

  days = (strptime(today, “%Y-%m-%d”) – strptime(startday, “%Y-%m-%d”)).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

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

  从回复中搜索演员姓名:

  接下来的步骤也由函数解决。函数的参数包括上一步得到的链接数组的来源,gao@.eng@^&code*@,你要查询的actor的名字(这个函数可以进一步扩展,还有演员名也是以列表的形式传递的,同时上一步生成的字典也可以更多)。

  因为虎扑论坛会把一些认可的回复放在前面,也就是重复。如图3所示:

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

  if i == 0: index = content.find('更多前端相关知识,成功完成论坛关键词的频次搜索。

  这只是一个例子,关键字可以是任意的,这不仅仅是一个为演员诞生而写的程序。用另一个词替换演员的名字可以做一些类似“你的年度关键词”的事情,文本大小基于频率。

  以上就是Python爬虫爬虫论坛关键词流程分析的详细内容。更多资讯请关注高代码码网其他相关话题文章!

  CodeNet() 提供的所有资源均来自互联网。如侵犯您的著作权或其他权益,请说明详细原因并提供著作权或权益证明,然后发送至邮箱‍,我们会尽快看到邮件处理你,或者直接联系。此网站 由 BY-NC-SA 协议授权

  转载请注明原文链接:Python爬虫爬取论坛关键词的过程分析

  报酬

  [做代码]

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线