学好 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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!