我是python的初学者。我尝试使用python3.5网络爬虫做一些实验。这是我的代码:
import urllib
import urllib.request
import re
for x in range(1):
page = x+1
url = "http://www.last.fm/tag/female+vocalists/artists?page="+str(page)
try:
data=urllib.request.urlopen(url).read()
data=data.decode('UTF-8')
#reg = r'<p class="grid-items-item-main-text">.*?link-block-target">'
#'(.*?)</a>.*?aux-text">"(.*?)"<span class="stat-name"'
reg = r'<p class="grid-items-(.*?)-main-text'
pattern = re.compile(reg, re.S)
items = pattern.findall(data)
for item in items:
#print(item[0],item[1])
print(item[0])
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
但我很失望地发现只显示了一个字符i
。它应该显示item
。
问题出在哪里?请帮我!谢谢!
我尝试根据问题的答案解决问题。真的行!但我有一个新问题!我修改了代码如下:
import urllib
import urllib.request
import re
for x in range(1):
page = x+1
url = "http://www.last.fm/tag/female+vocalists/artists?page="+str(page)
try:
data=urllib.request.urlopen(url).read()
data=data.decode('UTF-8')
reg = r'class=\"link-block-target\"[\r\n]+.*?>.*?</a>[\r\n]+.*?</p>'
'[\r\n]+.*?<p class=\"grid-items-item-aux-text\">[\r\n]+.*?'
'<span class=\"stat-name\">'
pattern = re.compile(reg, re.S)
items = pattern.findall(data)
for item in items:
print(item)
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
我发现它仍然输入了一些东西,但是没有(.*?)
正则表达式。问题出在哪里?谢谢!
我终于解决了我的问题。它属于错误表示多行字符串。这是新代码:
import urllib
import urllib.request
import re
for x in range(1):
page = x+1
url = "http://www.last.fm/tag/female+vocalists/artists?page="+str(page)
try:
data=urllib.request.urlopen(url).read()
data=data.decode('UTF-8')
reg = (r'class=\"link-block-target\"[\r\n]+.*?>(.*?)</a>[\r\n]+.*?</p>'
'[\r\n]+.*?<p class=\"grid-items-item-aux-text\">[\r\n]+(.*?)'
'<span class=\"stat-name\">')
pattern = re.compile(reg, re.S)
items = pattern.findall(data)
for item in items:
print(item[0],item[1])
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
感谢大家帮我解决问题!
答案 0 :(得分:0)
您正在打印'item'的第一个元素
for item in items:
#print(item[0],item[1])
print(item) # not item[0]
答案 1 :(得分:0)
首先,我认为在你的正则表达式中,你错过了"
reg = r'<p class=\"grid-items-(.*?)-main-text'
然后,如果你想要打印两个结果,你可以使用print(item[0],item[1])
做得很好,但正如我在网页的html代码中看到的那样,如果你只想要实际文本(例如,这首歌的标题你应该在你的正则表达式上多做一些工作,或者使用像BeautifulSoup这样的另一个库你是否会找到更强大,更简单的方法来获得你需要的元素。