一、设计方案
爬取的内容:豆瓣电影的榜单数字、名称、评星、评分、评论数量
方案实现思路:使用requests爬取网页,然后实现数据解析,借助pandas将数据写出到Excel
二、主题页面的结构特征分析
1.打开开发者工具,查找我所需的内容,以及它所在的标签;在 div class="item" 中查找。
2.进行页面解析

3分析节点

三、网络爬虫程序设计
1.数据爬取与采集
#获取页面 import requests from bs4 import BeautifulSoup import pandas as pd # 构造分页数字列表 page_indexs = range(0, 250, 25) list(page_indexs) def download_all_htmls(): """ 下载所有列表页面的HTML,用于后续的分析 """ htmls = [] for idx in page_indexs: url = f"https://movie.douban.com/top250?start={idx}&filter=" print("craw html:", url) r = requests.get(url, headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"}) if r.status_code != 200: raise Exception("error") htmls.append(r.text) return htmls htmls = download_all_htmls() htmls[0] def parse_single_html(html): """ 解析单个HTML,得到数据 @return list({"link", "title", [label]}) """ soup = BeautifulSoup(html, 'html.parser') article_items = ( soup.find("div", class_="article") .find("ol", class_="grid_view") .find_all("div", class_="item") ) datas = [] for article_item in article_items: rank = article_item.find("div", class_="pic").find("em").get_text() info = article_item.find("div", class_="info") title = info.find("div", class_="hd").find("span", class_="title").get_text() stars = ( info.find("div", class_="bd") .find("div", class_="star") .find_all("span") ) rating_star = stars[0]["class"][0] rating_num = stars[1].get_text() comments = stars[3].get_text() datas.append({ "rank":rank, "title":title, "rating_star":rating_star.replace("rating","").replace("-t",""), "rating_num":rating_num, "comments":comments.replace("人评价", "") }) return datas import pprint pprint.pprint(parse_single_html(htmls[0])) # 执行所有的HTML页面的解析 all_datas = [] for html in htmls: all_datas.extend(parse_single_html(html)) all_datas len(all_datas) df = pd.DataFrame(all_datas) df.to_excel("豆瓣电影TOP250.xlsx")
#保存成功

后续爬取数据的可视化参考:https://www.cnblogs.com/n4ll/p/12748687.html