怎么用正则表达式提取演员的名称
<p class="star">主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特
</p> 本帖最后由 qiuyouzhi 于 2020-8-7 13:50 编辑
re.findall('<p class="star">(.*?)</p>', '<p class="star">主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特</p>') 这样行不行:
from re import findall
string = '''<p class="star">
主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特
</p>'''
print(findall(r'<p class="star">.*?主演:(.*?)</p>', string.replace('\n', ''))) zltzlt 发表于 2020-8-7 13:49
这样行不行:
我觉得2楼的行,你这样.... zltzlt 发表于 2020-8-7 13:49
这样行不行:
我强迫症就犯了 qiuyouzhi 发表于 2020-8-7 13:45
pat=re.compile(r'<p class="star">[\s\S]*?主演:(.*?)[\s\S]*?</p>')
这样写为什么不行 陈尚涵 发表于 2020-8-7 13:51
我觉得2楼的行,你这样....
? 凯菇发瘟 发表于 2020-8-7 13:52
pat=re.compile(r'[\s\S]*?主演:(.*?)[\s\S]*?')
这样写为什么不行
其实两种都行只不过3楼那种会让我犯强迫症{:10_266:} 陈尚涵 发表于 2020-8-7 13:53
其实两种都行只不过3楼那种会让我犯强迫症
不是啊我这么写得到的是一个列表列表里面都是空的 凯菇发瘟 发表于 2020-8-7 14:00
不是啊我这么写得到的是一个列表列表里面都是空的
额,我看看 凯菇发瘟 发表于 2020-8-7 14:00
不是啊我这么写得到的是一个列表列表里面都是空的
pat = re.compile(r'<p class="star">.*?主演:(.*?)</p>', re.DOTALL) 陈尚涵 发表于 2020-8-7 14:01
额,我看看
我先说说我想干啥:
获取一个电影网的一些电影信息
一会我把代码发过去 陈尚涵 发表于 2020-8-7 14:01
额,我看看
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)
#电影信息
# 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)
#获取演员
#<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)
print(listactor) zltzlt 发表于 2020-8-7 14:05
这里有换行.*我感觉不行吧 zltzlt 发表于 2020-8-7 14:05
我懂了re.DOTALL就是让.匹配所有字符,但是我这么写为啥不行 zltzlt 发表于 2020-8-7 14:05
我发现了只要(.*?)和*?在一起或者和.*?在一起返回的都是一个列表列表里面所有元素都是空
页:
[1]