之前都是按部就班的往下写, 终于尝试在爬虫里写函数了
网址:https://music.163.com/#/artist?id=9272,爬取这50首歌的名字。分析网址:网易云主页是https://music.163.com,所以可以知道对于不同的歌手都有一个对应的id,像这样就需要将参数传入url中 ,另外浏览器标识headers是不变的header(写爬虫最关键的便是与反爬虫之间的斗争,因而我们要养成良好的习惯,学会构造头部)。
import requests
import re
url='https://music.163.com/artist'
def get_html(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.63 Safari/537.36'
}
params = {
'id': '9272'
}
#通过Request()方法构造一个请求对象
response = requests.get(url, headers=headers,params=params)
html=response.text
print(type(html)) #str
return html
def parse_html(html):
#遇见
pattern=re.compile('(.*?)')
names=re.findall(pattern,html)
print(len(names))
for name in names:
print(name)
if __name__ == '__main__':
html=get_html(url)
f = open("out.txt","w",encoding='utf-8') #添加encoding='utf-8'可以解决'gbk' codec can't encode character '\xa9'
f.write(html) #将html写入txt文件
parse_html(html)
注意谷歌浏览器喜欢在同一标签页积累网页,所以打开的网页源代码可能是之前网页的,所以最好将爬取的网页新建一个标签页(这个问题在这次爬虫困扰了自己很久)。