用的这段代码找的名字
findtitle = re.compile(r'<span class="title">(.*)</span>',)
网站源码是这样的:
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
运行得到的结果是这样的:'肖'
只有这一个字,而不是整个的“肖申克的救赎”
title = re.findall(findtitle, item) # 名称
哥们 你这不是没取全啊 你这是存放时把名字也拆开了吧? 电影名字就存了第一个字 打出来也就一个字儿了 这行吧[0]去了就行
这里处理有问题
findtitle = re.compile(r'<span class="title">(.*?)</span>')
加个问号
import urllib.request
from bs4 import BeautifulSoup
import re
# 链接
findlink = re.compile(r'<a href="(.*?)">')
# 图片
findimg = re.compile(r'<img.*src="(.*?)"', re.S) # re.s 表示让换行符包含在内
# 影片的名字
findtitle = re.compile(r'<span class="title">(.*?)</span>',)
# 豆瓣评分
findmarks = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 评价人数
findsb = re.compile(r'<span>(\d*)人评价</span>')
# 找到概况
findinq = re.compile(r'<span class="inq">(.*)</span>')
# 找到影片的相关内容
findrelate = re.compile(r'<p class="">(.*?)</p>', re.S)
baseurl = "https://movie.douban.com/top250?start="
# 爬取网页
def GetData(baseurl):
datalist = []
for i in range(0, 1):
url = baseurl + str(i * 25)
html = askUrl(url)
# 逐一解析
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all('div', class_="item"):
# print(item) 测试
data = [] # 保存一个电影数据
item = str(item)
link = re.findall(findlink, item)[0] # 链接
data.append(link)
img = re.findall(findimg, item)[0] # 图片
data.append(img)
title = re.findall(findtitle, item)[0] # 名称
print("----------->"+title)
if len(title) == 2:
ctitle = title[0]
data.append(ctitle.strip())
otitle = title[1].replace("/", "")
data.append(otitle.strip())
else:
data.append(title[0].strip())
data.append(' ') # 留空
marks = re.findall(findmarks, item)[0] # 评分
data.append(marks)
sb = re.findall(findsb, item)[0] # 评价人数
data.append(sb)
inq = re.findall(findinq, item) # 概况
if len(inq) != 0:
inq = inq[0].replace("。", "") # 去掉句号
data.append(inq)
else:
data.append(" ") # 留空
relate = re.findall(findrelate, item)[0] # 找到相关
relate = re.sub('<br(\s+)?/>(\s+)?', " ", relate)
data.append(relate.strip()) # 去掉前后空格
datalist.append(data) # 处理好的一系列电影信息放入
print(datalist)
# 得到一个指定url的网页内容
def askUrl(url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
}
# 用户代理
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
if __name__ == '__main__':
GetData("https://movie.douban.com/top250?start=")
title = re.findall(findtitle, item)[0] # 名称
这么写相当于只取电影名的第一个字儿 re.findall(findtitle, item)取出来 ['肖','申','克','的','救','赎'] [0]索引第一个就是‘肖’咯
title = re.findall(findtitle, item) 就行了
主要是以下代码段的问题
title = re.findall(findtitle, item) # 名称
if len(title) == 2: # 判断的应该是findtitle的结果,而不应该是第一个值的
ctitle = title[0] # 这行才是取中文名,即第一个元素
data.append(ctitle.strip())
otitle = title[1].replace("/", "") # 英文为第二个元素
data.append(otitle.strip())
else: # len(title)为1时 findtitle只有一个中文名元素
data.append(title[0].strip())
data.append(' ') # 留空
也就是判断条件是针对re.findall(findtitle, item),即 ['肖申克的救赎', '\xa0/\xa0The Shawshank Redemption']这个结果 , 而不是re.findall(findtitle, item)[0] data列表中放的应该是re.findall(findtitle, item)[0], 而不是re.findall(findtitle, item)[0][0]
其他如link , 不需要该判断,直接放的就是re.findall(findlink, item)[0]
import re
s='''<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>'''
findtitle = re.compile(r'<span class="title">(.*)</span>')
print(re.search(findtitle,s).group(1))
#输出
肖申克的救赎
这不就对了吗
import urllib.request
from bs4 import BeautifulSoup
import re
# 链接
findlink = re.compile(r'<a href="(.*?)">')
# 图片
findimg = re.compile(r'<img.*src="(.*?)"', re.S) # re.s 表示让换行符包含在内
# 影片的名字
findtitle = re.compile(r'<span class="title">(.*?)</span>',)
# 豆瓣评分
findmarks = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 评价人数
findsb = re.compile(r'<span>(\d*)人评价</span>')
# 找到概况
findinq = re.compile(r'<span class="inq">(.*)</span>')
# 找到影片的相关内容
findrelate = re.compile(r'<p class="">(.*?)</p>', re.S)
baseurl = "https://movie.douban.com/top250?start="
# 爬取网页
def GetData(baseurl):
datalist = []
for i in range(0, 1):
url = baseurl + str(i * 25)
html = askUrl(url)
# 逐一解析
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all('div', class_="item"):
# print(item) 测试
data = [] # 保存一个电影数据
item = str(item)
link = re.findall(findlink, item)[0] # 链接
data.append(link)
img = re.findall(findimg, item)[0] # 图片
data.append(img)
title = re.findall(findtitle, item)[0] # 名称
print("----------->"+title)
data.append(title)
marks = re.findall(findmarks, item)[0] # 评分
data.append(marks)
sb = re.findall(findsb, item)[0] # 评价人数
data.append(sb)
inq = re.findall(findinq, item) # 概况
if len(inq) != 0:
inq = inq[0].replace("。", "") # 去掉句号
data.append(inq)
else:
data.append(" ") # 留空
relate = re.findall(findrelate, item)[0] # 找到相关
relate = re.sub('<br(\s+)?/>(\s+)?', " ", relate)
data.append(relate.strip()) # 去掉前后空格
datalist.append(data) # 处理好的一系列电影信息放入
print(datalist)
# 得到一个指定url的网页内容
def askUrl(url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
}
# 用户代理
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
if __name__ == '__main__':
GetData("https://movie.douban.com/top250?start=")
import urllib.request
from bs4 import BeautifulSoup
import re
# 链接
findlink = re.compile(r'<a href="(.*?)">')
# 图片
findimg = re.compile(r'<img.*src="(.*?)"', re.S) # re.s 表示让换行符包含在内
# 影片的名字
findtitle = re.compile(r'<span class="title">(.*?)</span>',)
# 豆瓣评分
findmarks = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 评价人数
findsb = re.compile(r'<span>(\d*)人评价</span>')
# 找到概况
findinq = re.compile(r'<span class="inq">(.*)</span>')
# 找到影片的相关内容
findrelate = re.compile(r'<p class="">(.*?)</p>', re.S)
baseurl = "https://movie.douban.com/top250?start="
# 爬取网页
def GetData(baseurl):
datalist = []
for i in range(0, 1):
url = baseurl + str(i * 25)
html = askUrl(url)
# 逐一解析
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all('div', class_="item"):
# print(item) 测试
data = [] # 保存一个电影数据
item = str(item)
link = re.findall(findlink, item)[0] # 链接
data.append(link)
img = re.findall(findimg, item)[0] # 图片
data.append(img)
title = re.findall(findtitle, item)[0] # 名称
if len(title) == 2:
ctitle = title[0]
data.append(ctitle.strip())
otitle = title[1].replace("/", "")
data.append(otitle.strip())
else:
data.append(title[0].strip())
data.append(' ') # 留空
marks = re.findall(findmarks, item)[0] # 评分
data.append(marks)
sb = re.findall(findsb, item)[0] # 评价人数
data.append(sb)
inq = re.findall(findinq, item) # 概况
if len(inq) != 0:
inq = inq[0].replace("。", "") # 去掉句号
data.append(inq)
else:
data.append(" ") # 留空
relate = re.findall(findrelate, item)[0] # 找到相关
relate = re.sub('<br(\s+)?/>(\s+)?', " ", relate)
data.append(relate.strip()) # 去掉前后空格
datalist.append(data) # 处理好的一系列电影信息放入
print(datalist)
# 得到一个指定url的网页内容
def askUrl(url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
}
# 用户代理
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
if __name__ == '__main__':
GetData("https://movie.douban.com/top250?start=")
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y