前言:
目前大家对“豆瓣爬虫找出打一星的人”大体比较看重,你们都需要分析一些“豆瓣爬虫找出打一星的人”的相关文章。那么小编同时在网络上汇集了一些对于“豆瓣爬虫找出打一星的人””的相关知识,希望各位老铁们能喜欢,姐妹们一起来学习一下吧!前言
今天为大家带来利用Python爬虫抓取豆瓣电影《外太空的莫扎特》影评,废话不多说。
Let's start happily
开发工具
Python版本: 3.6.4
相关模块:
requests模块
json模块
re模块
os模块
bs4模块
pandas模块
time模块
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
思路分析
本文以爬取豆瓣电影《外太空的莫扎特》影评,讲解如何爬取豆瓣电影《外太空的莫扎特》影评!
前期准备
1.获取页面内容
def get_html(url): """获取网页全部数据""" headers = Agent_info() try: r = requests.get(url=url, headers=headers, timeout=30) r.encoding = r.apparent_encoding status = r.status_code datas = json.loads(r.text)["html"] str_html = "<html>{}</html>".format(datas) html = BeautifulSoup(str_html, "html.parser") print("爬虫状态码: " + str(status)) # print(type(html)) return html except Exception as e: print("很遗憾,数据爬取失败!") print(e)
2.提取数据
浏览器中打开我们要爬取的页面按F12进入开发者工具,查看我们想要的数据在哪里这里我们需要时间, 用户, 星级, 短评, 支持数
def etl_data(html): """提取数据""" comments = html.find_all('div', 'comment-item') # print(comments[0]) # 获取电影的评论并保存到列表(时间,用户,星级,短评,支持数) datas = [] for span in comments: # 短评发表的时间 times = span.find('span', 'comment-time').attrs['title'] # 用户名 name = span.find('a').attrs["title"] # 用户评分星级 try: level = span.find('span', 'rating').attrs['class'][0][-2:] if (level == '10'): level = "一星" elif (level == '20'): level = "二星" elif (level == '30'): level = "三星" elif (level == '40'): level = "四星" elif (level == '50'): level = "五星" except Exception as e: level = "无评价" content = span.find('span', 'short').string.strip() content = re.sub(r'\n', '', content) # 短评支持数 love_point = span.find('span', 'vote-count').string.strip() arr = [times, name, level, content, love_point] datas.append(arr) df = pd.DataFrame(datas) df.columns = ["时间", "用户", "星级", "短评", "支持数"] # print(arr) return df
3.获取下一个页面url
def get_nextUrl(html): """抓取下一个页面的 url""" try: # 找到下一页的 url url = html.find('a', 'next').attrs['href'] # print(url) next_start = re.search(r'[0-9]\d{0,5}', url).group(0) print("已经到 " + str(next_start) + " ,稍等一会儿\n") next_url = "; \ "&start={}&limit=20&status=P&sort=new_score&comments_only=1&ck=Cuyu".format(next_start) # print(next_url) return next_url except: print("到底了~")
运行结果
4.持久化存储数据代码实现
def save_data(data, fileName, Flag): """持久化存储数据""" file_name = fileName + "_" + time.strftime("%Y_%m_%d", time.localtime(time.time())) + ".csv" # print(file_name) data.to_csv(file_name, index=False, header=Flag, mode='a', encoding="utf_8_sig") if os.path.exists(file_name): print(file_name + " 数据爬取并保存成功!") else: print('数据保存失败,请再次尝试!')#代码测试2022.8.8无异常,点赞超过50,更新豆瓣读书Top250效果展示
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #豆瓣爬虫找出打一星的人