能不能爬取不同回答下的评论数据呢
时间: 2023-09-20 12:08:20 浏览: 89
是的,你可以使用Scrapy框架爬取不同回答下的评论数据。下面是一个基本的示例代码:
```python
import scrapy
class ZhihuSpider(scrapy.Spider):
name = 'zhihu'
allowed_domains = ['zhihu.com']
start_urls = ['https://www.zhihu.com/question/12345678']
def parse(self, response):
# 获取回答的链接
answer_links = response.xpath('//div[@class="List-item"]//a[@class="AnswerItem-meta AuthorInfo-avatarWrapper"]/@href')
for answer_link in answer_links:
answer_url = 'https://www.zhihu.com' + answer_link.extract()
yield scrapy.Request(answer_url, callback=self.parse_answer)
# 翻页操作
next_page = response.xpath('//button[@class="Button PaginationButton PaginationButton-next Button--plain"]/a/@href')
if next_page:
next_url = 'https://www.zhihu.com' + next_page.extract_first()
yield scrapy.Request(next_url, callback=self.parse)
def parse_answer(self, response):
# 获取回答下的评论链接
comment_links = response.xpath('//div[@class="Comments-container"]//a[@class="Button Comments-expandButton"]/@href')
for comment_link in comment_links:
comment_url = 'https://www.zhihu.com' + comment_link.extract()
yield scrapy.Request(comment_url, callback=self.parse_comment)
def parse_comment(self, response):
# 获取评论数据
comments = response.xpath('//div[@class="CommentItemV2"]//div[@class="CommentItemV2-content"]/span/text()')
# 将数据存储到字典中
data = {}
for i in range(len(comments)):
data[i] = comments[i].extract()
yield data
```
这个示例代码中,我们首先在parse()方法中获取回答的链接,然后逐个进行翻页操作并请求回答页面。在parse_answer()方法中,我们获取回答下的评论链接,然后逐个请求并解析评论页面。在parse_comment()方法中,我们使用XPath选择器获取评论数据,并将数据存储到字典中。最后使用yield关键字将数据传递给Scrapy引擎,最终存储到本地文件或者数据库中。
需要注意的是,爬取知乎数据需要遵守相关法律法规和知乎的爬虫协议,不得用于商业用途。同时,知乎的评论数据比较多,爬取速度较慢,需要考虑反爬虫机制和设置合理的爬取延时。
阅读全文