下面的这段代码为什么会报错?应该怎么解决?import requests import re import os session = requests.Session() # (1) 爬取m3u8文件的链接 url = "https://www.9tata.cc/play/14999-1-0.html" headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' } res = session.get(url, headers=headers, verify=False) m3u8_link = re.search('now="(.*?m3u8)"', res.text).group(1) print(m3u8_link) # https://ikcdn01.ikzybf.com/20221015/ecMSO74h/index.m3u8 print(os.path.dirname(m3u8_link)) # 顺便抓一个名字 # name = re.search(r'<td class="col2 hidden-xs">(?P<name>\w+)</td>', res.text).group("name") # print("name", name) # (2) 爬取m3u8文件 res = session.get(m3u8_link) print(res.text.split("\n")[2]) # m3u8_detail_link = os.path.join(os.path.dirname(m3u8_link), res.text.split("\n")[2]) print(m3u8_detail_link) # (3) 爬取m3u8具体文件 res = requests.get(m3u8_detail_link) print(res.text)
时间: 2023-07-15 16:13:34 浏览: 186
这段代码可能会报错因为:
1. 请求 `https://www.9tata.cc/play/14999-1-0.html` 返回的内容中可能没有符合正则表达式 `'now="(.*?m3u8)"'` 的内容,导致 `re.search` 函数返回 `None`,再调用 `.group(1)` 方法就会抛出 AttributeError。
2. 在注释 (2) 中,由于 `res.text.split("\n")[2]` 可能不存在,因此会抛出 IndexError。
3. 如果在注释 (2) 中成功获取到 `m3u8_detail_link`,由于该链接是相对链接,需要使用 `urllib.parse.urljoin` 函数将其与 `os.path.dirname(m3u8_link)` 拼接起来才能得到完整链接。
4. 在注释 (3) 中,使用了 `requests.get` 函数而不是之前创建的 `session.get` 方法,这意味着没有传递之前设置的 headers 和 cookies,可能会导致请求失败。
要解决这些问题,可以按照下面的方式修改代码:
```python
import requests
import re
import os
from urllib.parse import urljoin
session = requests.Session()
url = "https://www.9tata.cc/play/14999-1-0.html"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
# (1) 爬取m3u8文件的链接
res = session.get(url, headers=headers, verify=False)
m3u8_match = re.search(r'now="(.*?m3u8)"', res.text)
if m3u8_match:
m3u8_link = m3u8_match.group(1)
print(m3u8_link)
# (2) 爬取m3u8文件
res = session.get(m3u8_link)
if res.ok:
m3u8_detail_link = urljoin(os.path.dirname(m3u8_link), res.text.split("\n")[2])
print(m3u8_detail_link)
# (3) 爬取m3u8具体文件
res = session.get(m3u8_detail_link)
if res.ok:
print(res.text)
else:
print("Failed to get m3u8_detail_link")
else:
print("Failed to get m3u8_link")
else:
print("Failed to find m3u8_link")
```
阅读全文