正则爬一下猫眼电影排行榜

分析走一走

直接猫眼官网
然后榜单一条龙
右键检查
dd(弟弟)标签包含了所有的排名信息
在这里插入图片描述
再看看网页url
在这里插入图片描述
在这里插入图片描述

搜打死内

每页十个dd(弟弟)
对应每页十个榜单
url的最后offset=0和offset=10 and so on 对应的是第几页

大概就是这么个情况
那就仔细看看dd(弟弟)标签的内容
在这里插入图片描述
不想多废话了
上图
图上啥也有

那接下来干啥呢?

盘他

import re
import requests
from requests.exceptions import RequestException		#调用异常处理
import json

def get_url(url):			#使用header获取网页信息
    try:							#异常处理
        header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
        response = requests.get(url,headers = header)
        if response.status_code == 200:		#判断获取是否正常
            return response.text
        return None
    except RequestException:
        return None

def parse_html(html):				#准备使用正则解析网页	
    pattern = re.compile('<dd>.*?>(\d+)</i>.*?<a.*?href="(.*?)".*?title="(.*?)".*?>.*?'
                         '<img.*?>.*?<.*?src="(.*?)".*?star">(.*?)</p>.*?releasetime">'
                         '(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    temp = re.findall(pattern,html)

    for i in temp:
        yield{									#生成器生成字典形式
            'number':i[0],
            'address':i[1],
            'name':i[2],
            'image':i[3],
            'actor':i[4].strip()[3:],
            'time':i[5].strip()[5:],
            'score':i[6]+i[7]
        }
        print('排名:' + i[0])
        print('地址:https://maoyan.com' + i[1])
        print('电影名:' + i[2])
        print('图片:' + i[3])
        print('演员:' + i[4].strip()[3:])
        print('时间:' + i[5].strip()[5:])
        print('评分:' + i[6] + i[7])
        print('')
	

def save(content):				#保存文件
    with open ('result.txt','a',encoding='utf-8') as f:		#保存编码utf-8
        f.write(json.dumps(content,ensure_ascii = False) + '\n')		#关掉ensure_ascii才可以正常输出中文



def main(offset):				#主函数
    url = 'https://maoyan.com/board/4?offset=' + str(offset)		
    html = get_url(url)
    parse_html(html)
    for item in parse_html(html):		#遍历1~10页
        print(item)
        save(item)

if __name__ == '__main__':		#起始端 
    for i in range(10):
        main(i*10)

中间添加了一个print
这样输出结果舒服多了 但是保存的文件内容就是一坨屎一样难看
聊以自慰吧

猜你喜欢

转载自blog.csdn.net/dh0805dh/article/details/89571153