Python 我如何使用regex帮助抓取web数据?

Python 我如何使用regex帮助抓取web数据?,python,python-3.x,regex,re,Python,Python 3.x,Regex,Re,我试图在单个youtube视频页面上获取URL。youtube dl可以做到这一点,但我只需要URL,所以我想学习如何做到这一点 我的代码是获取页面源代码:source=requests。gethttps://www.youtube.com/watch?v=zXif_9RVadI 我在找21个。此代码的行:source\u line\u 21=source.text.split\n[20] 所有URL以https://r[0-9]开头,包括googlevideo.com/videoplaybac

我试图在单个youtube视频页面上获取URL。youtube dl可以做到这一点,但我只需要URL,所以我想学习如何做到这一点

我的代码是获取页面源代码:source=requests。gethttps://www.youtube.com/watch?v=zXif_9RVadI

我在找21个。此代码的行:source\u line\u 21=source.text.split\n[20]

所有URL以https://r[0-9]开头,包括googlevideo.com/videoplayback,以

我尝试了许多代码,但我总是得到0或1匹配。但是有15-20场比赛

re.match(r'https:\/\/.*googlevideo.com/videoplayback.*mimeType', source_line_21)
我不擅长正则表达式,我不能很好地理解它。谢谢大家

我在这里搜索的printsource_line_21[:32600]的输出。它太长了,所以我粘贴到那里:

使用它

re.matchr'https:\/\/r[0-9][\w\-@%]*googlevideo.com/videoplayback,$”,来源:第21行
我找到了一个解决方案,但实际上不是我想要的

进口稀土 从urlextract导入urlextract source=请求。gethttps://www.youtube.com/watch?v=zXif_9RVadI source\u line\u 21=source.text.split\n[20] sonuc=re.findall'https:\/\/r[0-9].\SmimeType',源代码第21行 提取器=URLExtract aa=[x代表提取器中的x。如果mime=x中的音频,则查找\u urlsonuc[0]
此代码将为我提供mime=音频格式的所有URL。我使用了URLExtract模块,它是外部的而不是内置的。因此,我仍在寻找更好的方法来解决我的问题。

您希望执行的操作稍微复杂一些;但是可以通过使用下面列出的几个工具来简化

我在示例中使用了urllib,因为我的请求在您继续访问YouTube cookies确认页面之前带回了Google的,但urllib允许我绕过这些垃圾

工具: urllib或请求 BeautifulSoup-通过bs4library 正则表达式-通过re库 JSON-通过JSON库 逻辑: 刮取站点数据 使用BeautifulSoup解析HTML 提取感兴趣的标签 使用正则表达式遍历标记并查找感兴趣的JavaScript变量 使用JSON迭代变量的内容以获取URL 代码: 你可以用

re.findall(r'https://r[0-9][^"]*', text)
re.findall(r'https://r[0-9][^"]*', text, re.I)  # case insensitive

细节

https://-https://字符串添加?如果要匹配http://,也可以在s之后:https?:// r-an-r字符 [0-9]-一个数字 [^]*-除字符外的零个或多个字符。
请附上一份。提取包含链接的原始HTML片段。将其硬编码为变量。然后使用该变量而不是source.text,创建一个示例,人们可以将其复制到他们的环境中,然后运行以重现您的问题。re.match仅在字符串开头查找模式。使用re。search@PranavHosangadisource.text太长,我不想粘贴到这里。如果人们想在他们的环境中尝试,我认为,使用我的代码是更好更快的尝试方式。我尝试重新搜索,但再次相同,0匹配。谢谢你的评论。source.text太长了,我知道,这就是为什么我要一段与此相关的内容。我以为你想要的是一段好像不起作用的内容。我编辑了它。很抱歉,非常感谢你,它起作用了,我正在试着理解你的代码:d内容中的ele代码['streamingData'][fmt]:提供JSON输出,有更多有组织的数据。我很高兴。很高兴听到你觉得它很有用。
# Print the detected URIs:
for i, url in enumerate(urls, 1):
    print(i, url[:75])

1 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
2 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
3 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
4 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
5 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
6 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
7 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
8 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
9 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
10 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
11 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
12 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
13 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
14 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
15 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
16 https://r2---sn-8pgbpohxqp5-cimd.googlevideo.com/videoplayback?expire=16202
re.findall(r'https://r[0-9][^"]*', text)
re.findall(r'https://r[0-9][^"]*', text, re.I)  # case insensitive