翻页爬取腾讯课堂课程用户昵称和评论

翻页爬取腾讯课堂课程用户昵称和评论

爬取过程:

1.找到目标的url
2.构造请求头参数
3.发送请求,获取响应
4.解析数据
5.保存数据

下面会对其中的细节进行讲解

本次案例需要注意的点

1.我们发现在请求头部分只添加User-Agent是无法完成的,因此我们需要将Referer和Cookie添加上(毕竟是腾讯课堂,爬取数据需要尊重一下)

2.解析数据时,可以把响应的json数据放在JSON在线解析中,查看目的数据所在的节点,从而使用jsonpath的语法提取。

3.保存数据时,将多条数据写入到文件中的方式为“a追加”的方式。

开始爬取的步骤:

首先找到目标的url,这里英语好的同学可以看到course_commet_state这个选项,对应的就是评论的url。
在这里插入图片描述

检查响应是否为我们需要的数据:

在这里插入图片描述

寻找不同页的url的规律(这里是前三页的url):

在这里插入图片描述在这里插入图片描述在这里插入图片描述

我们拿前三页的url进行比较,可以得出不同页的url差别在于参数page和r的不同。

url参数分析:

参数page:第一页的page=0;第二页的page=1,第三页的page=2,因此我们for循环的翻页规律也就显而易见,我们直接令page = i 即可(因为for循环i是从0开始的)

参数r:通过尝试我发现r的值对于获取响应没有影响,因此我们可以将参数r删去

通过JSON解析,找到昵称和评论所在的节点:

在这里插入图片描述

翻页规律和解析方法已经明确,开始我们的代码:

import requests
import jsonpath
import json

if __name__ == '__main__':
    # 输入要爬取的页数
    pages = int(input('请输入要爬取的页数:'))
    for i in range(pages):
        page = i
        # 确认目标的url
        url = f'https://ke.qq.com/cgi-bin/comment_new/course_comment_list?cid=380991&count=10&page={page}&filter_rating=0&bkn='
        # 构造请求头参数
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36',
            'Referer':'https://ke.qq.com/course/380991?taid=3687813539549247',
            'Cookie':'ts_refer=www.baidu.com/link; pgv_pvid=3055310294; ts_uid=2118064280; _pathcode=0.6180368297569794; tdw_auin_data=-; tdw_data_testid=; tdw_data_flowid=; iswebp=1; tdw_first_visited=1; pgv_info=ssid=s8062796281; Hm_lvt_0c196c536f609d373a16d246a117fd44=1613135091,1613135096,1614057330; ts_last=ke.qq.com/course/380991; tdw_data={"ver4":"www.baidu.com","ver5":"","ver6":"","refer":"www.baidu.com","from_channel":"","path":"ah-0.6180368297569794","auin":"-","uin":"","real_uin":""}; Hm_lpvt_0c196c536f609d373a16d246a117fd44=1614057466; tdw_data_new_2={"auin":"-","sourcetype":"","sourcefrom":"","uin":"","visitor_id":"5804772510395988"}'
        }
        # 发送请求,获取响应
        response = requests.get(url,headers=headers)
        # 将json数据转换成py数据
        py_data = response.json()
        # 提取目标数据:1.用户昵称,2.用户评论
        nick_name_list = jsonpath.jsonpath(py_data,'$..nick_name')
        comment_list = jsonpath.jsonpath(py_data,'$..first_comment')
        # 将数据放入字典,然后转换成json格式保存
        for i in range(len(nick_name_list)):
            dict_ = {}
            dict_[nick_name_list[i]] = comment_list[i]
            # 将字典转换成json格式
            json_data = json.dumps(dict_,ensure_ascii=False)+',\n'
            # 将数据保存到本地
            with open('翻页爬取腾讯课堂课程评论.json','a',encoding='utf-8')as f:
                f.write(json_data)

检查一下结果:我们爬取了3页评论(共30条)
在这里插入图片描述
这次案例与我上次写的一篇"翻页爬取豆瓣电影名称和评分"相类似,大家可以参考一下。

### 编写Python爬虫程序以爬取豆瓣评论并实现翻页功能 要使用 Python 实现一个能够爬取豆瓣评论爬虫,并支持翻页功能,可以从以下几个方面入手: #### 1. 使用 `requests` `BeautifulSoup` 进行基础爬虫构建 对于简单的爬虫需求,可以直接利用 `requests` 库发送 HTTP 请求获取网页数据,再通过 `BeautifulSoup` 解析 HTML 文档中的目标信息。这种方式适合初学者快速入门。 以下是基于此方式的一个简单示例代码[^1]: ```python import requests from bs4 import BeautifulSoup def fetch_douban_comments(base_url, headers): comments = [] for page in range(0, 226, 25): # 设置翻页范围 url = f"{base_url}?start={page}" response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') comment_elements = soup.select('div.comment') # 假设评论位于 div.comment 中 for element in comment_elements: content = element.find('p').get_text(strip=True) # 获取评论内容 author = element.find('span', class_='comment-info').find('a').text # 获取作者名字 comments.append({'author': author, 'content': content}) return comments if __name__ == "__main__": base_url = "https://movie.douban.com/subject/1234567/comments" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } all_comments = fetch_douban_comments(base_url, headers) for idx, comment in enumerate(all_comments[:10], start=1): print(f"[Comment {idx}] Author: {comment['author']}, Content: {comment['content']}") # 打印前10条评论 ``` #### 2. 利用 Scrapy 框架提升效率 如果项目规模较大或者需要更复杂的逻辑控制,则推荐采用 Scrapy 框架开发。Scrapy 提供了强大的异步处理能力以及灵活的任务调度机制,非常适合大规模数据采集场景[^1]。 下面是一个基本的 Scrapy Spider 配置例子[^1]: ```python import scrapy class DoubanCommentsSpider(scrapy.Spider): name = "douban_comments" allowed_domains = ["movie.douban.com"] start_urls = ['https://movie.douban.com/subject/1234567/comments'] custom_settings = { 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } def parse(self, response): next_page_selector = '.next a::attr(href)' yield from self.extract_data(response) next_page = response.css(next_page_selector).extract_first() if next_page is not None: absolute_next_page = response.urljoin(next_page) yield scrapy.Request(absolute_next_page, callback=self.parse) def extract_data(self, response): items = {} for item in response.css('.comment'): author = item.css('span.comment-info > a::text').extract_first().strip(), text = item.css('p::text').extract_first().strip(), items.update({ 'author': author, 'text': text }) yield items ``` 运行以上 Scrapy 脚本即可自动完成多页数据抓取工作。 #### 处理常见反爬策略 在实际操作过程中可能会遇到一些常见的反爬措施,例如 IP 封禁、验证码验证等。针对这些问题可以通过设置合理的请求间隔时间、更换 User-Agent 字符串等方式加以规避[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值