%load_ext autoreload%autoreload 2 # Reload all modules every time before executing Python code%autoreload 0 # Disable automatic reloading这个 parse_films函数用bs中的两个常用方法提取信息:
- find
- find_all
def parse_films(films): '''films is a list of `bs4.element.Tag` objects''' rel = [] for i, film in enumerate(films): title = film.find('a', class_="figure_title")['title'] print('Parsing film %d: ' % i, title) link = film.find('a', class_="figure")['href'] img_link = film.find('img', class_="figure_pic")['src'] # test if need VIP need_vip = bool(film.find('img', class_="mark_v")) score = getattr(film.find('div', class_='figure_score'), 'text', None) if score: score = float(score) cast = film.find('div', class_="figure_desc") if cast: cast = cast.get('title', None) play_amt = film.find('div', class_="figure_count").get_text() # db_score, db_link = search_douban(title) # Store key orders dict_item = OrderedDict([ ('title', title), ('vqq_score', score), # ('db_score', db_score), ('need_vip', need_vip), ('cast', cast), ('play_amt', play_amt), ('vqq_play_link', link), # ('db_discuss_link', db_link), ('img_link', img_link), ]) rel.append(dict_item) return rel
3导出最后 , 我们调用写好的函数 , 在主程序中运行 。
被解析好 , list of dictionaries格式的对象 , 可以直接传给DataFrame的constructor 。按照评分排序 , 最高分在前面 , 然后将播放链接转换成HTML的链接标签 , 更加美观而且可以直接打开 。
注意 , pandas生成的csv文件一直和Excel有兼容性问题 , 在有中文字符的时候会乱码 。解决方法是选择utf_8_sig这个encoding , 就可以让excel正常解码了 。Pickle是一个Python十分强大的serialization库 , 可以保存Python的对象为文件 , 再从文件中加载Python的对象 。我们将我们的DataFrame保存为 .pkl 。调用 DataFrame的 to_html方法保存一个HTML文件 , 注意要将 escape 设置为False不然超链接不能被直接打开 。
if __name__ == '__main__': df = DataFrame(parse_films(douban_films())) # Sorted by score df.sort_values(by="vqq_score", inplace=True, ascending=False) # Format links df['vqq_play_link'] = df['vqq_play_link'].apply(lambda x: '<a href=https://www.isolves.com/it/cxkf/yy/Python/2019-09-27/"{0}">Film link'.format(x)) df['img_link'] = df['img_link'].apply(lambda x: ''.format(x)) # Chinese characters in Excel must be encoded with _sig df.to_csv('vqq_douban_films.csv', index=False, encoding='utf_8_sig') # Pickle df.to_pickle('vqq_douban_films.pkl') # HTML, render hyperlink df.to_html('vqq_douban_films.html', escape=False)4项目管理代码部分就是这样 。那么写完了代码 , 就要把它归档保存 , 也便于分析 。选择放在Github上 。那么 , 其实Github是提供了一个命令行工具的(不是 git , 是 git的一个扩展) , 叫做 hub 。macOS用户可以这样安装
brew install hubhub有许多比 git更简练的语法 , 我们这里主要用
hub create -d "Create repo for our proj" vqq-douban-film来直接从命令行创建repo , 是不是很酷!根本不用打开浏览器 。然后可能会被提示在Github上登记一个你的SSH公钥(验证权限) , 如果没有的话用 ssh-keygen生成一个就好了 , 在Github的设置里把 .pub的内容复制进去 。项目目录里 , 可能会有 __pycache__和 .DS_Store这样你不想track的文件 。手写一个 .gitignore又太麻烦 , 有没有工具呢 , 肯定有的!Python有一个包
pip install git-ignoregit-ignore python # 产生一个python的template# 手动把.DS_Store加进去只用命令行 , 装逼装到爽
欢迎大家关注我的头条号 , 私信“python" , 学习资料包免费分享给需要的朋友 , 另有python学习交流群 , 可以交流学习拓展人脉 。
推荐阅读
- 铁观音拉酸的特点是什么
- 教你从零写一个验证码-Python图像处理实用练习
- 抖音狗子与我6分钟视频
- 铁观音茶制作要点
- 躲春可以和男朋友打电话吗,躲春和男朋友打视频可以吗
- 古代普洱茶熟茶的味道
- 八大名茶介绍
- 金骏眉冲泡小技巧
- 彻底理解python中的yield函数
- Python 网络爬虫的常用库汇总