欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

我要爬爬虫(6)-爬取猫眼Top100电影

程序员文章站 2022-05-08 10:56:33
...

直接上代码

import requests
import re
import json
import time
#传入偏移量返回指定网页文本
def make_url(offset):
    url='http://maoyan.com/board/4?offset='+str(offset*10)
    #print(url)
    header={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
    }
    try:
        response=requests.get(url,headers=header)
        #先判断返回的状态码
        if response.status_code==200:
            return response.text
        else:
            return None
    except:
        return None
#用正则匹配网页目标内容
def crawl(pure_text):
    pattern='<img data-src="(.*?)".*?<p class="name.*?title="(.*?)".*?上映时间:(\d{4}-\d{2}-\d{2}).*?<p class="score.*?integer">(.*?)<.*?fraction">(\d)<'
    result=re.findall(pattern,pure_text,re.S)
    for item in result:
        #这里使用生成器,每次生成一个电影
        yield {
            'image':item[0],
            'title':item[1],
            'date':item[2],
            'score':item[3]+item[4]
        }
#将匹配到的内容写入文本里
def write_file(content):
    #写入模式选择a即为追加,w为覆盖
    with open('maoyan.txt','a',encoding='utf-8') as f:
        #print(type(json.dumps(content)))
        f.write(json.dumps(content,ensure_ascii=False)+'\n')
#执行函数:爬取+写入
def main(i):
    for item in crawl(make_url(i)):
        print(item)
        write_file(item)
if __name__=='__main__':
    #这里的i为偏移量
    for i in range(10):
        main(i)
        time.sleep(1)

本身难度不大,但我在代码规范和函数封装方面加深了认识。

相关标签: spider