首页 > 其他分享 >利用爬虫爬知乎少字回答

利用爬虫爬知乎少字回答

时间:2023-08-10 16:35:48浏览次数:43  
标签:知乎 少字 list 爬虫 content answer 5D data 5B

利用爬虫爬知乎少字回答

感谢马哥python说的指导

最近在学习有关的知识 如果怕对服务器影响 可以修改sleep 时间每次更长一点。
这样就不用看一些营销号的长篇大论 或者看别人写小说了。




# 发送请求  有bug一次只有五个回答  但是我们可以拿到下一次回答。
# 最后一次回答的时候data等于[]如果data是[就退出循环]
r = requests.get(url, headers=headers)
# 接收返回数据  我已经成功请求到数据了

# 确保状态码为200,表示请求成功
if r.status_code == 200:
    # 解析返回的JSON数据
    j_data = r.json()
    
    # 假设你想获取一个名为"data"的键对应的值的长度
    # 注意,下面这行代码中的"data"应该是你想要操作的实际键的名称
    answer_list = j_data["data"]
    print(len(j_data["data"]))
    title = answer_list[0]['target']['question']['title']
    for answer in answer_list:
    # 回答内容
        try:
            # 从HTML中想要提取有用的文字,你可以使用Python的第三方库来进行解析和处理HTML。
            answer_content = answer['target']['content']
            soup = BeautifulSoup(answer_content, 'html.parser')
            # 使用.get_text()方法来提取纯文本内容
            useful_text = soup.get_text()
            
            # 时间
             
            timestamp = answer['target']['updated_time']
            # 使用datetime.fromtimestamp()方法将时间戳转换为datetime对象
            
            dt_object = datetime.fromtimestamp(int(timestamp))
             
            # 使用strftime()方法将datetime对象格式化为你想要的日期字符串
            formatted_date = dt_object.strftime("%Y/%#m/%#d")
           
             
            
        except:
            useful_text = ''
            formatted_date = ''
        answer_content_list.append(useful_text)
        answer_time_list.append(formatted_date)
         
    Write2Csv(
        {
 
        '回答时间': answer_time_list,
 
        '回答内容': answer_content_list,
    },title)
    print(j_data["paging"]["next"])
else:
    print("请求失败了:", r.status_code)
v_question_id = 'session_id=1691645872201785699'
# 定义请求地址(含指定问题id):
# 请求地址
url = 'https://www.zhihu.com/api/v4/questions/556648354/feeds?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cattachment%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Cis_labeled%2Cpaid_info%2Cpaid_info_content%2Creaction_instruction%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cvip_info%2Cbadge%5B*%5D.topics%3Bdata%5B*%5D.settings.table_of_content.enabled&offset=&limit=3&order=default&platform=desktop'.format(v_question_id)

总共的代码

import requests
import time
import pandas as pd
import os
import re
import random
from datetime import datetime
from bs4 import BeautifulSoup
# 请求头 (如果数据量仍未满足且遇到反爬,请尝试增加cookie等其他请求头解决)
# 只需要这点数据量 这个请求头就够了
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
}
v_question_id = 'session_id=1691645872201785699'
# 定义请求地址(含指定问题id):
# 请求地址
url = 'https://www.zhihu.com/api/v4/questions/556648354/feeds?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cattachment%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Cis_labeled%2Cpaid_info%2Cpaid_info_content%2Creaction_instruction%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cvip_info%2Cbadge%5B*%5D.topics%3Bdata%5B*%5D.settings.table_of_content.enabled&offset=&limit=3&order=default&platform=desktop'.format(v_question_id)


# 定义一些空列表用于存放解析后数据: 一些对我没用我不写了
author_name_list = []  # 答主昵称
author_gender_list = []  # 答主性别
follower_count_list = []  # 答主粉丝数
author_url_list = []  # 答主主页
headline_list = []  # 答主签名
answer_id_list = []  # 回答id
answer_time_list = []  # 回答时间
answer_content_list = []  # 回答内容
comment_count_list = []  # 评论数
voteup_count_list = []  # 点赞数
thanks_count_list = []  # 喜欢数

def Write2Csv(List,title) :
    import pandas as pd
    dataframe = pd.DataFrame(List)
    print('请选择输出的格式1是slsx 2是csv,输入1或者2:')
    typeinput = input()
    if typeinput == '1':
        filepath = title+'.xlsx'
        dataframe.to_excel(filepath)
    elif typeinput == '2':
        filepath = title +'.csv'
        dataframe.to_csv( filepath , index=False , sep = '\n' ,  header = False , encoding='utf_8_sig')
title = ""
def whileurl(urls) :
    global title
    print("执行一次")
    # 发送请求  有bug一次只有五个回答  但是我们可以拿到下一次回答。
    # 最后一次回答的时候data等于[]如果data是[就退出循环]
    r = requests.get(urls, headers=headers)
    # 接收返回数据  我已经成功请求到数据了

    # 确保状态码为200,表示请求成功
    if r.status_code == 200:
        # 解析返回的JSON数据
        j_data = r.json()
        if len(j_data) == 0 or j_data["paging"]["page"]==100:
            Write2Csv({'回答时间': answer_time_list,'回答内容': answer_content_list,},title)
            return  # 退出递归调用
        # 假设你想获取一个名为"data"的键对应的值的长度
        # 注意,下面这行代码中的"data"应该是你想要操作的实际键的名称
        answer_list = j_data["data"]

        title = answer_list[0]['target']['question']['title']
        for answer in answer_list:
        # 回答内容
            try:
                # 从HTML中想要提取有用的文字,你可以使用Python的第三方库来进行解析和处理HTML。
                answer_content = answer['target']['content']
                soup = BeautifulSoup(answer_content, 'html.parser')
                # 使用.get_text()方法来提取纯文本内容
                useful_text = soup.get_text()
            
                # 时间
             
                timestamp = answer['target']['updated_time']
                # 使用datetime.fromtimestamp()方法将时间戳转换为datetime对象
            
                dt_object = datetime.fromtimestamp(int(timestamp))
             
                # 使用strftime()方法将datetime对象格式化为你想要的日期字符串
                formatted_date = dt_object.strftime("%Y/%#m/%#d")
           
             
            
            except:
                useful_text = ''
                formatted_date = ''
            if len(useful_text)<=200:
                answer_content_list.append(useful_text)
                answer_time_list.append(formatted_date)
             
            
         

         
        urls = j_data["paging"]["next"]
        
        time.sleep(5)
        whileurl(urls)
    else:
        print("请求失败了:", r.status_code)





whileurl(url)


标签:知乎,少字,list,爬虫,content,answer,5D,data,5B
From: https://www.cnblogs.com/xxdmua/p/17620715.html

相关文章

  • 讨论 | 如何为雷达学习者建立一个较好的知识开源分享交流空间?(知乎+公众号+微信群模式)
    本文编辑:@调皮连续波,保持关注调皮哥,获得更多学习内容和建议!自从建立了雷达工程技术交流微信群以来,随着雷达研究人员们的激烈讨论,我逐渐意识到了一个严重的问题,即:各位雷达学习者在雷达微信群里咨询的问题,只能够解决的此刻当事人遇到的疑问,而对于后来可能会遇到同样问题的雷达学习者,......
  • 高性能爬虫的秘诀:合理配置HTTP代理池实现并发请求
    哈喽,爬虫程序员们大家好!你们有没有遇到这样的情况:爬取的数据量庞大,但爬虫速度却慢得难以忍受?别着急,今天我将向大家分享高性能爬虫的秘诀之一:合理配置HTTP代理池实现并发请求。这一技巧不仅能够显著提升爬虫的响应速度,还能帮助我们突破IP封锁和反爬虫机制的限制。首先,让我们了解一下......
  • 爬虫框架的选择与对比:Python爬虫框架的比较与评估
    爬虫框架的选择与对比:Python爬虫框架的比较与评估Hey大家好!作为一名专业的隧道代理供应商,我今天要和大家分享一些关于爬虫框架的知识。在开发爬虫项目时,选择一个合适的框架非常重要,它可以提高开发效率、简化操作并提供丰富的功能。Python作为一门流行的编程语言,拥有许多优秀的爬虫......
  • 爬虫与搜索引擎优化:通过Python爬虫提升搜索排名
    作为一名专业的爬虫程序员,我深知网站的搜索排名对于业务的重要性。在如今竞争激烈的网络世界中,如何让自己的网站在搜索引擎结果中脱颖而出,成为关键。今天,和大家分享一些关于如何通过Python爬虫来提升网站的搜索排名的技巧和实践经验。无论你是在提升自己的网站排名还是优化客户的SE......
  • nginx降低爬虫的效率
    环境nginx1.20理由不说了,就是通过Nginx一些策略来帮助防止爬虫或恶意访问配置User-Agent检测爬虫通常会使用特定的User-Agent来标识自己,Nginx可以通过检测User-Agent字符串并拒绝使用非法的User-Agent的请求。if($http_user_agent~*"badcrawler"){return403;//......
  • 高匿名算优HTTP代理:为何是网络爬虫的最佳选择?
    HTTP代理有一般匿名和高匿名代理两种,一般匿名HTTP代理在进行网络爬虫时,存在安全风险。为社么说高匿名算优HTTP代理更适合网络爬虫呢,原因有一下几点:高匿算优HTTP代理能隐藏真实IP地址、提高爬取效率、突破访问限制、防止被反爬虫机制检测等四大优点。下面具体的来分析一下四点优点:使......
  • python爬虫获取script标签中的var变量值
    遇到问题:资料调研过程中遇到js动态生成页面(在检查中可以看到需要爬取的数据,但是查看网页源代码中都是js动态生成,跟检查中的代码不一致),通过xpath在html中获取不到需要的数据,真正的数据在 所需要的数据为script中的varindData,数据类型为包含有许多dict的list解决办法:可以通......
  • Python 爬虫实战:驾驭数据洪流,揭秘网页深处
    前言随着互联网的发展,数据变得越来越重要,爬虫技术也越来越受到人们的关注。爬虫技术可以帮助我们自动化地抓取网络数据,从而提高数据的利用价值。但是,在爬虫过程中,很容易被目标网站识别出来,甚至被封禁。所以,使用代理IP是非常重要的一步。本篇文章将介绍如何使用Python编写爬虫,并使......
  • [Python爬虫]selenium4新版本使用指南
    From:码同学测试公众号------------------------------------Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaFirefox,Safari,GoogleChrome,Opera,Edge等。这个工具的主要功能包括......
  • 遇到问题--python--爬虫--使用代理ip第二次获取代理ip失败
    情况获取代理ip的代码defferch_proxy_ips():try:api="http://dynamic.goubanjia.com/dynamic/get/12323.html?sep=3"response=urllib.request.urlopen(api,timeout=8)the_page=response.read()content=the_page.decode(&......