curl 抓取网页(如何通过python抓取网页,见Python和python的功能很强大 )

优采云 发布时间: 2021-11-10 18:05

  curl 抓取网页(如何通过python抓取网页,见Python和python的功能很强大

)

  之前的一篇文章文章介绍了如何通过python爬取网页,见Python爬取中文网页,但很快发现这个方法对CSDN个人博客的爬取不起作用

  

  . 很久以前就听说过curl的威力,所以今天就来试一试。

  curl的功能非常强大。这里介绍一下curl的使用。你可以参考一下。其他问题请百度和谷歌。这里我们只使用最基本的--connect-timeout和-o。以本博客为例:

  curl -s --connect-timeout 10 -o blog "http://blog.csdn.net/nevasun"

  OK,当前目录下就会有一个博客文件了。当我们将其作为纯文本文件打开时,我们会发现以下信息:

  访问:10598次

积分:610分

排名:第13159名

  接下来,我们要做的就是从博客文件中提取访问量、积分、排名等信息。前几天刚学了awk,所以用awk试试吧。awk的介绍和学习请参考AWK学习总结和练习。下面的awk相关内容可以在里面找到。

  awk 程序由一系列“模式-动作”语句组成:模式 {action}。

  匹配模式可以是/(visit|points|ranking):.*/,匹配模式后需要取出当前行的值。由于号码长度不固定,不能使用定长号码。您可以使用 gsub() 将非数字字符替换为空字符,其余为数字。接下来是完整的awk代码。

  awk 'BEGIN {FS="[]"; ORS="\t"} /(访问|积分|排名):.*/ \

{ if($3 == "访问:") {gsub(/[^0-9]+/, ""); print} \

else if($3 == "积分:") {gsub(/[^0-9]+/, ""); print} \

else if($3 == "排名:") {gsub(/[^0-9]+/, ""); print}}' blog

  至此,我们已经能够抓取到需要的数据了,通过shell和python脚本,使用cron,可以让系统定时记录每天的访问情况。

  Shell 脚本 account.sh:

  Python 脚本 dbroutine.py:

  #!/usr/bin/python

import os

import cPickle as pcl

import sys

from time import localtime

def load_record(db_file):

recordlist = [{}]

if os.path.exists(db_file):

readf = file(db_file)

try:

recordlist = pcl.load(readf)

except:

recordlist = [{}]

readf.close()

return recordlist

def dump_record(db_file, recordlist, total_access, score, rank):

writef = file(db_file, "wb")

if recordlist[0].has_key("total_access"):

day_count = total_access-recordlist[0]["total_access"]

else:

day_count = total_access

date = "%s.%s.%s" % \

(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)

day_record = dict(date=date, day_access=day_count, \

total_access=total_access, score=score, rank=rank)

recordlist.insert(0, day_record)

pcl.dump(recordlist, writef)

writef.close()

def print_record(recordlist, total_access, score, rank):

if recordlist[0].has_key("total_access"):

day_count = total_access-recordlist[0]["total_access"]

else:

day_count = total_access

date = "%s.%s.%s" % \

(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)

day_record = dict(date=date, day_access=day_count, \

total_access=total_access, score=score, rank=rank)

print day_record

for i in range(0, len(recordlist)):

print recordlist[i]

db_file = "blog_record.dat"

recordlist = [{}]

if len(sys.argv) != 5:

raise Exception

total_access = int(sys.argv[1])

score = int(sys.argv[2])

rank = int(sys.argv[3])

flag = int(sys.argv[4])

recordlist = load_record(db_file)

if flag != 0:

dump_record(db_file, recordlist, total_access, score, rank)

else:

print_record(recordlist, total_access, score, rank)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线