思路分析:
- 目的:获取歌手名字
- 网页地址
- 分析网页结构和标签位置
- 模拟 http 请求,发送请求,获取 html
- 正则表达式提取
标签:具有唯一性,是最接近数据的标签。
import re
from urllib import request
class Spider:
url = "https://music.douban.com/top250"
headers = {
"User-Agent": "你的浏览器"}
def __fetch_content(self): # 私有方法
ret = request.Request(url=Spider.url, headers=Spider.headers) # 添加头文件模拟浏览器,否则会被反爬虫,获取不到html数据
res = request.urlopen(ret) # 接受类的url,获取返回结果
htmls = res.read().decode("utf-8") # 获取的数据转换成utf-8格式
return htmls
def __analysis(self, htmls):
name = re.findall('<p class="pl">(.*?)/.*?</p>', htmls, flags=re.S)
return name
def go(self): # 入口方法
htmls = self.__fetch_content()
name = self.__analysis(htmls)
return name
spider = Spider()
name = spider.go()
print(f"豆瓣音乐Top{len(set(name))}排名的歌手 : {set(name)}")