抓取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爬虫爬取论坛关键词的过程分析
报酬
[做代码]