一个简单的网络爬虫

学习了一个小爬虫,能在豆瓣上抓取特定的信息抓取并存储起来,他实现的原理如下

  1. 首先通过openurl对网站进行解析,将其转换成字符串类型
  2. 利用目标字符的特性用函数进行抓取信息,这里利用find2(s1,  s2):返回字符串s2在字符串s1中的下标,find_between(s, left, right):返回在s字符串中left和right中间的字符串
  3. 爬虫的原理(猜测):将网站的信息转换为字符串形式,然后通过对字符信息的检索来达到抓取数据的目的

实现代码:(这里实现的是抓取25部电影的评分)

import urllib.request

def log(*args, **kwargs):
    print(*args, **kwargs)

# 如果s2是s1的子字符串,那么返回s2在s1中的下标,否则返回-1
def find2(s1, s2):
    result = -1
    for i in range(len(s1)):
        if s1[i:i + len(s2)] == s2:
            result = i
            break

    return result

# 返回字符串left和字符串right在s字符串中之间的字符串,这个函数只返回第一队left和right
def find_between(s, left, right):
    result = ''
    subscript1 = find2(s, left)
    subscript2 = find2(s, right)

    for i in range(subscript1+len(left), subscript2):
        result = result + s[i]

    return result


def openurl(url):
    # 这里把 url 写死为豆瓣 top250 页面
    # url = 'https://movie.douban.com/top250'
    # 下载页面, 得到的是一个 bytes 类型的变量 s
    s = urllib.request.urlopen(url).read()
    # 用 utf-8 编码把 s 转为字符串并返回
    content = s.decode('utf-8')
    return content


def ratings():
    grade = []
    str = openurl('https://movie.douban.com/top250')
    left = 'property="v:average">'
    right = '</span>'
    for i in range(25):
        m = find2(str, left)
        # 第一次分片是为了减少find_between(str, left, right)的遍历次数
        str = str[m:]
        grade.append(find_between(str, left, right))
        # 将上一对left、right通过分片消除
        str = str[len(left):]
    return grade


def __main():
    array = ratings()
    m = 0
    for i in array:
        log('第{}个数据是:{}'.format(m, i))
        m += 1

__main()

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值