鱼C论坛

 找回密码
 立即注册
查看: 2245|回复: 15

[技术交流] 怎么用正则表达式提取演员的名称

[复制链接]
发表于 2020-8-7 13:41:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<p class="star">
                主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特
        </p>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-7 13:45:25 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-8-7 13:50 编辑
re.findall('<p class="star">(.*?)</p>', '<p class="star">主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特</p>')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 13:49:08 | 显示全部楼层
这样行不行:
from re import findall
string = '''<p class="star">
                主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特
        </p>'''
print(findall(r'<p class="star">.*?主演:(.*?)</p>', string.replace('\n', ''))[0])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 13:51:41 | 显示全部楼层

我觉得2楼的行,你这样....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 13:52:12 | 显示全部楼层

我强迫症就犯了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 13:52:15 | 显示全部楼层

pat=re.compile(r'<p class="star">[\s\S]*?主演:(.*?)[\s\S]*?</p>')
这样写为什么不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 13:52:49 | 显示全部楼层
陈尚涵 发表于 2020-8-7 13:51
我觉得2楼的行,你这样....

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 13:53:14 | 显示全部楼层
凯菇发瘟 发表于 2020-8-7 13:52
pat=re.compile(r'[\s\S]*?主演:(.*?)[\s\S]*?')
这样写为什么不行

其实两种都行只不过3楼那种会让我犯强迫症
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 14:00:17 | 显示全部楼层
陈尚涵 发表于 2020-8-7 13:53
其实两种都行只不过3楼那种会让我犯强迫症

不是啊我这么写得到的是一个列表列表里面都是空的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 14:01:34 | 显示全部楼层
凯菇发瘟 发表于 2020-8-7 14:00
不是啊我这么写得到的是一个列表列表里面都是空的

额,我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 14:05:00 | 显示全部楼层
凯菇发瘟 发表于 2020-8-7 14:00
不是啊我这么写得到的是一个列表列表里面都是空的
pat = re.compile(r'<p class="star">.*?主演:(.*?)</p>', re.DOTALL)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 14:05:13 | 显示全部楼层

我先说说我想干啥:
获取一个电影网的一些电影信息
一会我把代码发过去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 14:06:37 | 显示全部楼层

import re
import urllib
import urllib.request
import random
url="https://maoyan.com/board/4?"
#用户输入开始和结束的页数
while True:
        print("输入你想爬取电影的开始页数")
        start=int(input())
        if start<=0 or start>34:
                print("输入的开始页数有误请重新输入")
                continue
        else:
                break
while True:
        print("输入你想爬取电影的结束页数")
        end=int(input())
        if end<=0 or end>34:
                print("输入的结束页数有误请重新输入")
                continue
        else:
                break

list1=[]
listrank=[]
listmes=[]
listactor=[]
header1="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
header2="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
header3="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0"
header4="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"
list1.append(header1)
list1.append(header2)
list1.append(header3)
list1.append(header4)
for page in range(start,end+1):
        #获取网页
        offset=(page-1)*10
        fullurl=url+"offset="+str(offset)
        choicuesr=random.choice(list1)
        headers={"User-Agent":choicuesr}
        rep=urllib.request.Request(fullurl,headers=headers)
        reponse=urllib.request.urlopen(rep).read().decode()
        #获取排名
        #<i class="board-index board-index-1">1</i>
        #<i class="board-index board-index-2">2</i>
        pat=re.compile(r'<i class="board-index board-index-\d*">(.*?)</i>')
        result=pat.findall(reponse)
        for i in range(0,len(result)):
                listrank.append(result[i])
        #电影信息
        # title="钢琴家" data-act="boarditem-click"
        # title="勇敢的心" data-act="boarditem-click"
        pat=re.compile(r'alt="(.*?)" class="board-img" />')
        result=pat.findall(reponse)
        for i in range(0,len(result)):
                listmes.append(result[i])

        #获取演员
        #<p class="star">
        #                主演:梅尔·吉布森,苏菲·玛索,帕特里克·麦高汉
        #        </p>       
        pat=re.compile(r'<p class="star">[\s\S]*?主演:(*?)[\s\S]*?</p>')
        result=pat.findall(reponse)
        for i in range(0,len(result)):
                listactor.append(result[i])
print(listactor)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 14:08:13 | 显示全部楼层

这里有换行.*我感觉不行吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 14:16:16 | 显示全部楼层

我懂了re.DOTALL就是让.匹配所有字符,但是我这么写为啥不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 14:18:15 | 显示全部楼层

我发现了只要(.*?)和[/s/S]*?在一起或者和.*?在一起返回的都是一个列表列表里面所有元素都是空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 14:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表