一个简单的爬虫,爬取豆瓣上某部电影的所有评论及计算评分

本文分享了使用Java爬取豆瓣网页数据的过程,包括解决503错误、模拟登录、计算评分的简易方法。通过分析网页特点,截取关键字,实现了对《云南虫谷》电影评分的自动获取。

1.一个狗血的背景:这几天都在盼望着《云南虫谷》上映,早就想去看(奈何这是一部大烂片)。在看电影之前习惯性的先在豆瓣上看看评分,以免被坑。可是迟迟的等不到豆瓣的评分结果,所以决定自己爬取页面,来计算一下。(感谢web端还没有完全退出历史舞台)。

2.过程:
2.1 想起前几天好像在鼓捣Linux的时候,无意间执行了一个命令,把百度的首页面的html全都下载下来了。那就好办了。用java的HttpURLConnection类去访问网站并且用流读取网页。然后将其看成一个字符串,截取关键字,不就ok了(反正也是玩玩,就不用那种按页面的标签去遍历和获取内容了,用python更合适的)。
2.2 StringBuffer html = new StringBuffer(); URL url = new URL(urlString);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(isr);
            String temp;
            while ((temp = br.readLine()) != null) {
                html.append(temp).append("/n");
            }
            br.close();
            isr.close();
            String eveyHtml = html.toString();

这是核心的代码了。可是在访问的时候却报错503,服务器被禁止了,没有登录的原因。
2.3 在访问网页的时候加上这几行代码

conn.setRequestProperty("User-Agent","xxxxxx")
conn.setRequestProperty("Cookie","xxxxx")

登录状态的,在浏览器中F12可以获取到以上的两个属性。
2.4 现在开始执行main方法,可是在执行一段时间以后,依然是503 并且,手动在浏览器登录,也被禁止访问豆瓣,自己的账号登录也被禁止了。(大概是被豆瓣封ip了),于是在每次的执行完一页的时候“休息”3秒钟

Thread.sleep(3000);

这样就好了。
2.5 接下来计算评分和评论,就要看豆瓣网页的特点了。
在这里插入图片描述

在这里插入图片描述
所以呢

 String[] chaArry = srcText.split("class=\"short\">");
        String comment = chaArry[1].substring(0, chaArry[1].indexOf("</"));

就得到了评论的内容和每页的各种得分了。

2.6 至于计算豆瓣的评分的规则,是早期看到豆瓣CEO的一篇文章的时候他的简单介绍,现在肯定有高级的算法过滤掉一些水军的评论。这里只是简单的计算了一下

 double oneStarPoint = (one / total) * oneInit;
            double twoStarPoint = (two / total) * twoInit;
            double threeStarPoint = (three / total) * threeInit;
            double fourStarPoint = (four / total) * fourInit;
            double fiveStarPoint = (five / total) * fiveInit;
            //假设每颗星相当于2分,则改电影的豆瓣评分
            double scoreTotal = (oneStarPoint + twoStarPoint + threeStarPoint + fourStarPoint + fiveStarPoint)
                    * twoInit;
            System.out.println("《云南虫谷》电影的豆瓣评分为:" + scoreTotal);
            return oneStarTotal;

2.7 最后开始运行
在这里插入图片描述

<think>好的,我需要帮助用户解决如何使用Python的requests库和html.parser模块爬取豆瓣Top250电影的名称和评分的问题。首先,我得回忆一下爬虫的基本流程,包括发送请求、解析HTML内容以及提取数据。 用户提到了使用requests和html.parser,所以应该不需要用到BeautifulSoup以外的解析库。不过,用户可能对HTML结构不太熟悉,我需要先确认豆瓣Top250页面的结构。根据之前的引用内容,用户可能参考了已有的代码示例,但需要调整以适应html.parser。 首先,发送请求。用户需要获取网页内容,可能会遇到反爬机制,比如User-Agent检查。所以代码中需要添加headers模拟浏览器访问,否则可能返回403错误。引用中的示例代码可能没有处理这一点,需要补充。 接下来,解析HTML。使用html.parser的话,可以通过BeautifulSoup来解析。需要找到包含电影信息的HTML元素。查看豆瓣Top250的页面结构,每个电影项通常包裹在一个class为“item”的div中。电影名称可能在<span class="title">里,评分在<span class="rating_num">里。 然后,提取数据。遍历每个“item”div,提取名称和评分。需要注意的是,豆瓣可能有多个标题元素,比如中文名和英文名,用户可能只需要中文名,所以需要选择第一个<span class="title">。 最后,存储数据。可以用列表存储,再转为DataFrame或用csv保存。但用户示例中可能只需要打印出来。 可能的问题点:反爬措施,如验证码或IP封锁,但Top250页面相对容易爬取,不过还是需要注意设置请求头,并控制请求频率。此外,HTML结构是否有变化,需要验证当前的元素类名是否正确。 现在,整理步骤:导入库、设置请求头、发送请求、检查状态码、解析HTML、查找所有电影项、循环提取名称和评分、处理可能的异常(比如某部电影没有评分)、存储结果。 示例代码需要包括这些部分,并确保语法正确。同时,提醒用户遵守豆瓣的robots.txt,并设置适当的延迟以避免对服务器造成压力。</think>### 分步解答 以下是使用Python的`requests`库和`html.parser`解析豆瓣Top250电影名称与评分的示例代码: ```python import requests from bs4 import BeautifulSoup # 1. 设置请求头模拟浏览器访问(避免被反爬) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" } # 2. 发送请求获取页面内容 response = requests.get("https://movie.douban.com/top250", headers=headers) print("响应状态码:", response.status_code) # 正常应返回200[^1] if response.status_code == 200: # 3. 使用html.parser解析HTML soup = BeautifulSoup(response.text, "html.parser") # 4. 定位所有电影项(观察网页结构,每个电影在class="item"的div中) movie_items = soup.find_all("div", class_="item") # 5. 遍历提取数据 movies = [] for item in movie_items: # 提取中文标题(第一个span.title) title = item.find("span", class_="title").text.strip() # 提取评分(class="rating_num") rating = item.find("span", class_="rating_num").text.strip() movies.append({"名称":
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值