Python爬虫:获取音乐排行榜单

最近在学习Python,顺便参考网上的资料写了小脚本用来简单的筛选音乐榜单,第一次涉及相关内容,比较简单浅显,大神请绕步(也欢迎指教,让我多多学习),接下来话不多说直接上代码:

from selenium import webdriver
import csv
import re
import time

url = 'http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0'
driver = webdriver.Chrome()
tt = time.strftime('%Y%m%d_%H%M%S',time.localtime())
filename = tt+'_playlist'+'.csv'
paper = 0
with open(filename, 'w', newline='', encoding='gb18030') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(['标题', '播放数', '链接'])
    while url != 'javascript:void(0)':
        paper = paper+1
        print('{0}-->当前链接为 :{1}'.format(paper, url))
        driver.get(url)
        driver.switch_to.frame('contentFrame')
        #print(driver.page_source)
        content = driver.page_source
        # current = driver.current_url
        # print(current)
        pattern = re.compile('
  • .*?j-flag.*?src="(.*?)">.*?title="(.*?)".*?class="msk">.*?class="nb">(.*?)', re.S) data = re.findall(pattern, content) for item in data: title = re.sub('\s', '', item[1]) number = re.sub('\s', '', item[2]) link = item[0].strip() if '万' in number and int(re.match('^[0-9]*', number).group()) > 100: # 筛选 writer.writerow([title, number, link]) url = driver.find_element_by_css_selector("a.zbtn.znxt").get_attribute('href') csv_file.close() print('Save Ok') driver.close()
  • 遇到的问题:在文件写入时刚开始一直在爬取几条信息后,一直报错:

    UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u2022’ in position 8: illegal multibyte sequence

    对于一个新手,我也很无奈遇到这样的问题,查阅些资料说是要指定 ‘utf-8’编码,更改后,确认很流畅,很顺利的得到的了想要的结果(小有成就感,嘻嘻),然后打开得到的csv文件查看了下,完全不是想要的,都是些乱码,根本看不懂是什么。接着想既然可以写入文件,爬到想要的数据,那么整体上代码应该没有问题&提示的错误信息UnicodeEncodeError,由此推断应该还是编码方式不对,灵机一动,我查阅了常用的编码方式有哪些,采用暴力法,终于发现gb18030,这下解决了我的问题。
    最后附一些遇到相似问题的文章链接,同时也感谢他们的分享:
    Python3写入数据到csv文件中编码问题
    解决python3 UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xXX’ in position XX

    你可能感兴趣的:(python)