Python爬虫(一)--爬取猫眼Top100排行

1.概述

    这是博主接触的第一个爬虫实例,利用python的request库和正则表达式对猫眼网站的Top100电影进行爬取,将结果打印出来并保存成txt文件。关键的部分有以下三点:

  1. python中request库的简单使用。
  2. 利用re模块来解析request到的页面。
  3. json格式文件存储和读取方法。

2.详细代码以及注释如下:

# -*-coding:utf-8 -*-
import json
import requests
from requests.exceptions import RequestException
import re
import time


def get_one_page(url):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
        }
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None


def parse_one_page(html):
    #re.S使得匹配包括换行符在内的所有字符。
    pattern = re.compile('
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?)

.*?releasetime">(.*?)

' + '.*?integer">(.*?).*?fraction">(.*?).*?
', re.S) items = re.findall(pattern, html) for item in items: yield { 'index': item[0], 'image': item[1], 'title': item[2], 'actor': item[3].strip()[3:], 'time': item[4].strip()[5:], 'score': item[5] + item[6] }#yield执行后并没有退出,每次遇到关键字后返回相应结果,保留函数当前的执行状态。直到函数执行完。 #理解为播放和暂停更佳。 ''' def func(): for i in range(0,3): yield i f=func() f.next() f.next() def func(n): for i in range(0,n): val = yield i print val f = func(10) f.next() #f.send(None) f.send(2) f.send(10) print f.next() ''' def write_to_file(content): with open('result.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + '\n')#inorder to output the chinese def main(offset): url = 'http://maoyan.com/board/4?offset=' + str(offset) html = get_one_page(url) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == '__main__': for i in range(10): main(offset=i * 10) time.sleep(1)

需要注意的以下几点:

  1. 猫眼电影网站爬取时,需要加入User-Agent字段,具体的内容可以通过浏览器的开发工具来查看,使用Chrome浏览器采用如下的方式:进入浏览器后右键单击,点击检查,然后输入猫眼网址,在获得请求中寻找NetWork选项,选中左边的任意一条请求,便可看到如下显示的内容,其中就有我们需要的User-Agent,添加后再进行后续的操作。

              Python爬虫(一)--爬取猫眼Top100排行_第1张图片

    2.关于正则表达式的匹配,很长的一串字符看起来让人很难理解,可以一点点拆开来看。Python爬虫(一)--爬取猫眼Top100排行_第2张图片

 

    如上图所示,还是进入浏览器的开发工具,按上述步骤来选定Top100中排行第一的电影,霸王别姬,我们要爬取所有的电影时候,首先就需要掌握单个电影的全部信息,然后采用遍历的方式便可以获取到所有的电影。选中霸王别姬后,第一眼看到就是

节点,我们将这个节点下所有的子节点全部打开,对应着parse_one_page中的正则表达式来看,就可以看得很清楚,这种匹配方式结合re的非贪婪方式,将单个电影的有效信息全部匹配,并在后续yield操作中将信息罗列开来,显示清楚。

    3.关于json格式文件的存储

    json全称为JavaScript Object Notation,JavaScript标记对象,通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式。常用的数据处理方式有两种:Json的loads方法将JSON文本字符串转位JSON对象,dumps方法将JSON对象转位文本字符串,这里使用的是后者。

总体来说,代码很简单,很容易理解,多敲几遍就没有什么大问题。

你可能感兴趣的:(爬虫呢)