2024年Python最新如何用Python爬取网易云两百万热歌,面试培训班一般几天

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

核心代码


以下是Scrapy中从歌手分类页到歌手专辑页再到专辑内的单曲页爬取链:

def start_requests(self):

for area in self._seq_area:

for kind in self._seq_kind:

for initial in self._seq_cat_initial:

cat = f’{area}00{kind}’

artists_url = self.settings[‘HOST_ARTISTS’].format(cat=cat, initial=initial)

yield Request(artists_url, callback=self.parse_artists)

def parse_artists(self, response):

for singer_node in response.css(‘#m-artist-box li’):

response.meta[‘item’] = singer_item = SingerItem()

singer_item[‘_id’] = singer_item[‘singer_id’] = singer_id = \

int(singer_node.css(‘a.nm::attr(href)’).re_first(‘\d+’))

singer_item[‘crawl_time’] = datetime.now()

singer_item[‘singer_name’] = singer_node.css(‘a.nm::text’).get()

singer_item[‘singer_desc_url’] = self.get_singer_desc(singer_id)

singer_item[‘singer_hot_songs’] = response.urljoin(singer_node.css(‘a.nm::attr(href)’).re_first(‘\S+’))

singer_item[‘cat_name’] = response.css(‘.z-slt::text’).get()

singer_item[‘cat_id’] = int(response.css(‘.z-slt::attr(href)’).re_first(‘\d+’))

singer_item[‘cat_url’] = response.urljoin(response.css(‘.z-slt::attr(href)’).re_first(‘\S+’))

yield singer_item

yield Request(self.get_singer_albums(singer_id), callback=self.parse_albums)

def parse_albums(self, response):

for li in response.css(‘#m-song-module li’):

yield response.follow(li.css(‘a.msk::attr(href)’).get(), callback=self.parse_songs)

next_page = response.css(‘div.u-page a.znxt::attr(href)’).get()

if next_page:

yield response.follow(next_page, callback=self.parse_albums)

def parse_songs(self, response):

album_item = AlbumItem()

album_item[‘_id’] = album_item[‘album_id’] = int(re.search(‘id=(\d+)’, response.url).group(1))

album_item[‘album_name’] = response.css(‘h2::text’).get()

album_item[‘album_author’] = response.css(‘a.u-btni::attr(data-res-author)’).get()

album_item[‘album_author_id’] = int(response.css(‘p.intr:nth-child(2) a::attr(href)’).re_first(‘\d+’))

album_item[‘album_authors’] =[{‘name’: a.css(‘::text’).get(), ‘href’: a.css(‘::attr(href)’).get()}

for a in response.css(‘p.intr:nth-child(2) a’)]

album_item[‘album_time’] = response.css(‘p.intr:nth-child(3)::text’).get()

album_item[‘album_url’] = response.url

album_item[‘album_img’] = response.css(‘.cover img::attr(src)’).get()

album_item[‘album_company’] = response.css(‘p.intr:nth-child(4)::text’).re_first(‘\w+’)

album_item[‘album_desc’] = response.xpath(‘string(//div[@id=“album-desc-more”])’).get() if \

response.css(‘#album-desc-more’) else response.xpath(‘string(.//div[@class=“n-albdesc”]/p)’).get()

用这个 ‘span#cnt_comment_count::text’ 有些没有评论的会出问题,会变成“评论”

album_item[‘album_comments_cnt’] = int(response.css(‘#comment-box::attr(data-count)’).get())

album_item[‘album_songs’] = response.css(‘#song-list-pre-cache li a::text’).getall()

album_item[‘album_appid’] = int(json.loads(response.css(‘script[type=“application/ld+json”]::text’).get())[‘appid’])

yield album_item

for li in response.css(‘#song-list-pre-cache li’):

song_item = SongItem()

song_item[‘crawl_time’] = datetime.now()

song_item[‘song_name’] = li.css(‘a::text’).get()

song_item[‘_id’] = song_item[‘song_id’] = int(li.css(‘a::attr(href)’).re_first(‘\d+’))

song_item[‘song_url’] = response.urljoin(li.css(‘a::attr(href)’).re_first(‘\S+’))

yield song_item

try:

热歌信息在
节点下,可以通过div#hotsong-list li a 得到歌曲的Id, href, name

但是,可以通过下面的textarea节点得到更为详细的data,这个不能通过正则匹配[],不然会被一些歌曲名给套住

有些歌手没有热门歌曲,比如: https://music.163.com/#/artist?id=13226806, 返回的是一个’\n’,无法json解析,因此用.strip()过滤

在解析韩国歌手页面的时候出现问题,比如: https://music.163.com/artist?id=1038327, 有时用BeautifulSoup的html5解析能解决问题

但提升效果有限,此处为了代码简介就不展开了

json_data = json.loads(response.xpath(‘.//textarea/text()’).get())

for item in json_data:

song_item = SongItem()

song_item.update(item)

song_item[‘_id’] = item[‘id’]

song_item[‘crawl_time’] = datetime.now()

yield song_item

except JSONDecodeError:

with open(‘Failed Textarea Collection.txt’, ‘a’, encoding=‘utf-8’) as f:

f.write(response.url + ‘\n’)

当接近200万首歌的数据爬取完毕之后,我们启动评论爬虫,主要工作就是遍历数据库中还没有更新“评论数”这个字段的歌曲id,然后访问对应的评论api,得到我们想要的评论数据。

核心代码如下:

def start_requests(self):

cursor = self.coll_song.find({‘comments_cnt’: {‘$exists’: False}}, no_cursor_timeout=True)

for song_item in cursor:

if self.settings.get(‘PARSE_ALL_COMMENTS’):

limit, offset = 100, 0

elif self.settings.get(‘PARSE_HOT_COMMENTS’):

limit, offset = 0, 0

else:

limit, offset = 0, 1

comment_url = self.get_comment_page_url(song_item[‘song_id’], limit=limit, offset=offset)

yield Request(comment_url, dont_filter=False, callback=self.parse,

meta={‘song_item’: song_item, ‘limit’: limit, ‘offset’: offset})

cursor.close()

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值