我正试图使用以下声明从网页中获取标题:
titl1 = re.findall(r'<title>(.*?)</title>',the_webpage)
使用它,我得到['random webpage example1']
。如何删除引号和括号?
我还试图抓住一组每小时更改的链接(这就是我需要通配符的原因):links = re.findall(r'(file=(.*?).mp3)',the_webpage)
。
我得到了
[('file=http://media.kickstatic.com/kickapps/images/3380/audios/944521.mp3',
'http://media.kickstatic.com/kickapps/images/3380/audios/944521'),
('file=http://media.kickstatic.com/kickapps/images/3380/audios/944521.mp3',
'http://media.kickstatic.com/kickapps/images/3380/audios/944521'),
('file=http://media.kickstatic.com/kickapps/images/3380/audios/944521.mp3',
'http://media.kickstatic.com/kickapps/images/3380/audios/944521')]
如何在没有file=
的情况下获取mp3链接?
我还想下载mp3文件,并附上网站标题,以便显示
random webpage example1.mp3
我该怎么做?我还在学习Python和正则表达式,这有点让我感到难过。
答案 0 :(得分:0)
至少在第1部分,你可以做到
>>> mytitle = title1[0]
>>> print mytitle
random webpage example1
正则表达式返回一个匹配的字符串列表,所以你只需要抓住列表中的第一个项目。
同样,对于第二部分,正则表达式返回一个里面有元组的列表。 你可以这样做:
>>> download_links = [href for (discard, href) in links]
>>> print download_links
['http://media.kickstatic.com/kickapps/images/3380/audios/944521', 'http://media.kickstatic.com/kickapps/images/3380/audios/944521', 'http://media.kickstatic.com/kickapps/images/3380/audios/944521']
对于下载文件,请使用urlib2
(至少对于python 2.x,不确定python 3.x)。有关详细信息,请参阅this question。
答案 1 :(得分:0)
第1部分
titl1 = re.findall(r'<title>(.*?)</title>',the_webpage)
将返回一个列表,当您打印列表时,它将打印括号和引号。如果您确定始终只有一个匹配,请尝试print title[0]
。 (你也可以试试re.search)
对于第二部分,如果您将重新模式从"(file=(.*?)\.mp3)"
更改为"file=(.*?)\.mp3"
,您将只获得添加.mp3扩展名所需的'http://linkInThisPart/path/etc/etc'
部分。
即
audio_links = [x +'.mp3' for x in re.findall(r'file=(.*?)\.mp3',web_page)]
要下载您可能想要查看的文件urllib,urllib2
import urllib2
url='http://media.kickstatic.com/kickapps/images/3380/audios/944521.mp3'
req=urllib2.Request(url)
temp_file=open('random webpage example1.mp3','wb')
buffer=urllib2.urlopen(req).read()
temp_file.write(buff)
temp_file.close()
答案 2 :(得分:0)
代码:
#!/usr/bin/env python
import re,urllib,urllib2
Url = "http://www.ihiphopmusic.com/music/rick-ross-sixteen-feat-andre-3000"
print Url
print 'test .............'
req = urllib2.Request(Url)
print "1"
response = urllib2.urlopen(req)
print "2"
the_webpage = response.read()
print "3"
titl1 = re.findall(r'<title>(.*?)</title>',the_webpage)
print "4"
a2 = [x +'.mp3' for x in re.findall(r'file=(.*?)\.mp3',the_webpage)]
print "5"
a2 = [x[0][5:] for x in a2]
print "6"
ti = titl1[0]
print ti
print "7"
print a2
print "8"
print "9"
#print the_page
print "10"
req=urllib2.Request(a2)
print "11"
temp_file=open(ti)
print "12"
buffer=urllib2.urlopen(req).read()
print "13"
temp_file.write(buff)
print "14"
temp_file.close()
print "15"
print "16"
结果
http://www.ihiphopmusic.com/music/rick-ross-sixteen-feat-andre-3000
test .............
1
2
3
4
5
6
Rick Ross - Sixteen (feat. Andre 3000)
7
['', '', '']
8
9
10
Traceback (most recent call last):
File "grub.py", line 29, in <module>
req=urllib2.Request(a2)
File "/usr/lib/python2.7/urllib2.py", line 198, in __init__
self.__original = unwrap(url)
File "/usr/lib/python2.7/urllib.py", line 1056, in unwrap
url = url.strip()
AttributeError: 'list' object has no attribute 'strip'
答案 3 :(得分:0)
Python 3:
import requests
import re
from urllib.request import urlretrieve
- 首先获取HTML文字
html_text=requests.get('url')
- 正则表达式找到网址
正则表达式模式,匹配(&#39;模式&#39;,&#39;文字&#39;,标志)
在模式中,&#39;()&#39;用于分组你想要的。在这种情况下,我们将&#39; http://*****.mp3'组合在一起,您可以使用.group(1)或groups()来引用它。
url_find=re.findall('file=(http://media.mp3*',html_text)
for url_match in url_matches:
index += 1
print(url_match)
urlretrieve(url_match, './graber/mp3/user' + str(index) + '.mp3')
我是如何完成的,希望这会有所帮助。(下载的方法有多种方式,在这种情况下,我使用urlretrieve)