爬取猫眼电影

自己仔细研读了崔庆才老师的书爬取猫眼电影这一节深有感触,自己实际上在一年前就看过这一节的视频,但是当时没看懂(因为当时基础知识太差),经过大半年的积累,终于基本上能够看明白代码基础意思,按照崔庆才老师的博客写出自己的第一个爬虫代码。

https://germey.gitbooks.io/python3webspider/content/3.4-Requests%E4%B8%8E%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%88%AC%E5%8F%96%E7%8C%AB%E7%9C%BC%E7%94%B5%E5%BD%B1%E6%8E%92%E8%A1%8C.html

代码完整内容如下:

import requests
import re
import json
from requests.exceptions import RequestException
import time

# 利用requests方法访问页面
def get_onepage(url):
    try:
        response=requests.get(url)
        if response.status_code==200:
            return response.text
        return None
    except RequestException:
        return None

#提取文件中的重要内容
def parse_one_page(html):
    pattern = re.compile(
        '<dd>.*?board-index.*?>(.*?)</i>.*?title="(.*?)".*?data-src="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',
        re.S)
    items = re.findall(pattern, html)

    for item in items:
        yield{
            'index':item[0],
            'title':item[1],
            'image':item[2],
            'actor':item[3].strip()[3:] if len(item[3])>3 else '',
            'time':item[4].strip()[5:] if len(item[4])>6 else '',
            'score':item[4].strip()+item[5].strip()
        }

# 写入文件
def write_file(content):
    with open('result.text','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')#注意这里要加这个'\n'来换行


# main方法作为所有函数的总开关,负责调用所有函数
def main(offset):
    url='https://maoyan.com/board/4?offset='+str(offset)#注意这里url的写法
    html=get_onepage(url)
    for item in parse_one_page(html):
        print(item)
        write_file(item)

# 分页爬取
if __name__=='__main__':
    for i in range(10):
        main(offset=i*10)
        time.sleep(1)#因为爬取速度过快,可能会引起错误,所以这里需要控制下爬取的速度

 

posted @ 2019-05-20 18:15  舒畅123  阅读(105)  评论(0编辑  收藏  举报