python爬取知乎标题_python爬虫 爬取知乎文章标题及评论

目的:学习笔记

2154468-20201110175546386-764350258.png

2.首先我们试着爬取下来一篇文章的评论,通过搜索发现在 response里面我们并没有匹配到评论,说明评论是动态加载的。

2154468-20201110175837853-1434869187.png

3.此时我们清空请求,收起评论,再次打开评论

4.完成上面操作后,我们选择XHR,可以发现点击评论的时候发送了3个请求。

5.我们点击带comments的请求,然后在response里搜索可以匹配到评论,返回的是json数据,说明评论请求是这条没错了

2154468-20201110180020541-242762903.png

请求链接在上图,现在咱先不管请求链接的组合规则是什么,继续往下

6.接下来 打开json.cn,复制response里的json数据粘贴进去

2154468-20201110180125051-2061345341.png

7。分析json数据,一个object包含一条评论的所有信息,比如评论人,评论内容等等,我们需要写代码从里面把相关的信息搞出来。

2154468-20201110180158901-607548728.png

8.现在我们知道了请求链接url=https://www.zhihu.com/api/v4/articles/258812959/root_comments?order=normal&limit=20&offset=20&status=open'

请求方式为:request

可以开始写代码获取相关信息了

代码:

import requests

import json

url = 'https://www.zhihu.com/api/v4/articles/258812959/root_comments?order=normal&limit=20&offset=20&status=open'

Headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36",

"referer": "https://www.zhihu.com/"

}

res=requests.get(url,headers=Headers).content.decode('utf-8')

jsonfile=json.loads(res)

next_page=jsonfile['paging']['is_end']

print(next_page)

for data in jsonfile['data']:

id=data['id']

content=data['content']

author=data['author']['member']['name']

print(id,content,author)

打印效果:

2154468-20201110180558635-1010244169.png

9.至此,我们打印了知乎上面第一页,第一个话题,第一页评论,下面我们来思考怎么抓取该话题的所有评论。

10.我们点击第二页 获取到请求url=https://www.zhihu.com/api/v4/answers/1307614528/root_comments?order=normal&limit=20&offset=20&status=open

对比第一页的url1=https://www.zhihu.com/api/v4/answers/1307614528/root_comments?order=normal&limit=20&offset=0&status=open

可以发先offset由0变成了20,继续分析后面页面可得每过一页offset便加20。

那么一直加20什么时候会是个头呢,这时我们翻到最后一页,分析最后一页的json数据发现

is_end的值为Ture,所以我们可以用一个while循环,当is_end==Ture时 break掉就行

2154468-20201110180720432-1758271444.png

11.代码:

import requests

import json

from lxml import etree

import re

i=0

while True:

url='https://www.zhihu.com/api/v4/articles/258812959/root_comments?order=normal&limit=20&offset={}&status=open'.format(i)

i+=20

Headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36",

"referer": "https://www.zhihu.com/"

}

res = requests.get(url=url, headers=Headers).content.decode('utf-8')

jsonfile=json.loads(res)

next_page=jsonfile['paging']['is_end']

print(next_page)

comp = re.compile('?\w+[^>]*>')

for data in jsonfile['data']:

content=comp.sub("",data['content'])

author=data['author']['member']['name']

print("昵称---"+author,"评论:"+content)

if next_page==True:

break

通过分析可以看出只有前面那串数字不一样,于是可以得出前面那串数字是控制不同话题的

13.接下来我们从话题来找关联,发先能在response里面匹配到信息,于是我打算动手直接写代码把相关信息提前出来

2154468-20201110184721627-481886909.png

代码:

import requests,json

from lxml import etree

Headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36",

"cookie": '''_zap=3935ec64-2d91-4666-903c-a641b2510b18; d_c0="AOBcn_xhAxKPToowOy9HNL3DgDozDHDt63I=|1602244658"; capsion_ticket="2|1:0|10:1604449780|14:capsion_ticket|44:YjAwODdlMjcxNzY4NGYwODlmNjgxMzYyNWFkZDJlYTI=|6312ca79725710f1810a97a1fe3c4bbd6d16d02f769891626a67124cba7dd1f9"; z_c0="2|1:0|10:1604449808|4:z_c0|92:Mi4xVnlXQUNBQUFBQUFBNEZ5Zl9HRURFaVlBQUFCZ0FsVk5FRVNQWUFDOUlsV1pKa2hZUTdvc1U5Z1cxbTluajk5UW5n|dc09f94f0b3e78d3d80f6d18da39109a38b3357154e275642bec5e4afa4c825b"; tst=r; q_c1=097e8b52467b4017a4f27f26dd8622c2|1604625864000|1604625864000; _xsrf=88ef577a-c34c-49a1-8a13-faf8cd85c55a; KLBRSID=4843ceb2c0de43091e0ff7c22eadca8c|1605003647|1604996383''',

"referer": "https://www.zhihu.com/"

}

url1='https://www.zhihu.com/'

res=requests.get(url1,headers=Headers).text

html=etree.HTML(res)

divs = html.xpath('''//div[@class="Card TopstoryItem TopstoryItem--old TopstoryItem-isRecommend"]''')

for div in divs:

title=div.xpath('.//h2//a[@target="_blank"]/text()')[0]

link=div.xpath('.//h2//a[@target="_blank"]/@href')[0]

link_num=link.split('/')[-1]

print(link_num)

运行结果:

2154468-20201110184804927-1076845904.png

14.如上面结果可以发现link_num刚好是可以控制话题滴。

于是开始写代码:

import requests,json

from lxml import etree

headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36",

"cookie": '''_zap=3935ec64-2d91-4666-903c-a641b2510b18; d_c0="AOBcn_xhAxKPToowOy9HNL3DgDozDHDt63I=|1602244658"; capsion_ticket="2|1:0|10:1604449780|14:capsion_ticket|44:YjAwODdlMjcxNzY4NGYwODlmNjgxMzYyNWFkZDJlYTI=|6312ca79725710f1810a97a1fe3c4bbd6d16d02f769891626a67124cba7dd1f9"; z_c0="2|1:0|10:1604449808|4:z_c0|92:Mi4xVnlXQUNBQUFBQUFBNEZ5Zl9HRURFaVlBQUFCZ0FsVk5FRVNQWUFDOUlsV1pKa2hZUTdvc1U5Z1cxbTluajk5UW5n|dc09f94f0b3e78d3d80f6d18da39109a38b3357154e275642bec5e4afa4c825b"; tst=r; q_c1=097e8b52467b4017a4f27f26dd8622c2|1604625864000|1604625864000; _xsrf=88ef577a-c34c-49a1-8a13-faf8cd85c55a; KLBRSID=4843ceb2c0de43091e0ff7c22eadca8c|1605003647|1604996383''',

"referer": "https://www.zhihu.com/"

}

url1='https://www.zhihu.com/'

res=requests.get(url1,headers=headers).text

html=etree.HTML(res)

divs = html.xpath('''//div[@class="Card TopstoryItem TopstoryItem--old TopstoryItem-isRecommend"]''')

for div in divs:

title=div.xpath('.//h2//a[@target="_blank"]/text()')[0]

link=div.xpath('.//h2//a[@target="_blank"]/@href')[0]

link_num=link.split('/')[-1]

i=0

print(f'.........................................标题为:{title} ...........................................................')

while True:

url2='https://www.zhihu.com/api/v4/answers/{}/root_comments?order=normal&limit=20&offset={}&status=open'.format(link_num,i)

i += 20

print(f'正在打印第{i / 20}页。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。')

res = requests.get(url2, headers=headers).content.decode('utf-8')

jsonfile = json.loads(res)

next_page = jsonfile['paging']['is_end']

# print(next_page)

for data in jsonfile['data']:

id = data['id']

content = data['content']

author = data['author']['member']['name']

print(f'{author}评价:{content}')

if next_page == True:

break

运行结果截图:

2154468-20201110184851430-1423498983.png

至此完成了第一页全话题 全评论的爬取.

写道这里发现知乎的话题也是动态加载的并不需要翻页,很多数据都是通过json传入,而且需要传入cookie才可以进行爬取

最后:代码写的不够完善至少加强自己对爬虫的理解,有些地方需添加异常处理的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道

前两天家里电脑显示器的线坏了,火急火燎的买了根线,谁知道买回来之后接口不匹配,不能用。显示器为什么要有这么多接口呢?这些接口又有什么区别呢?必须把它搞清楚!这不,经过我的不屑努力&#xf…

docker rabbitmq php扩展,Docker开启RabbitMQ延时消息队列

前言经常在开发中会遇到一些不需要同步执行的业务,那我们就需要用到消息队列来进行异步执行,但是对于某些业务就还需要用到延时的功能,比如订单支付超时关闭,那么这个时候我们就需要开启消息队列的延时功能,当然也有朋…

[转]Eclipse插件开发之基础篇(3) 插件的测试与调试

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 Eclipse中已经嵌入了JUnit,我们可以使用JUnit为插件进行单体测试。一般的JUnit是不可以对插件部分(对Eclipse的API依赖的部分)进行测…

大整数乘法c语言代码_大整数乘法

大整数乘法和我们小学学过的乘法公式一样&#xff08;如下图&#xff09;&#xff0c;就是按位相乘&#xff0c;两个数中的每一位彼此相乘&#xff0c;然后将相同列的结果加起来&#xff0c;最后统一处理进位即可。#include <iostream> #include <cstring> using n…

primefaces_懒惰的JSF Primefaces数据表分页–第2部分

primefaces页面代码非常简单&#xff0c;没有复杂性。 检查“ index.xhtml”代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…

龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...

近期在第二届数字中国建设峰会上展出的国产芯片龙芯3号。芯片是信息产业的灵魂&#xff0c;通用CPU(中央处理器)可以说是芯片中的“珠峰”。自主研发CPU&#xff0c;难度很大。在这个故事的起点&#xff0c;2001年8月的一个清晨&#xff0c;当龙芯第一代产品龙芯1号成功启动操作…

帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程

最近春哥仿站团队接到很多仿站客户订单&#xff0c;这里面有一个这样的功能&#xff0c;表单提交。今天花时间写个教程给大家。另外我们春哥仿站团队推出低价仿站业务&#xff0c;市面上99%的企业站点都能制作出来&#xff0c;有需要的联系我们。今天春哥团队华哥给大家讲解一下…

golang linux安装

go在linux下的安装&#xff1a; [rootlocalhost src]# wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz 速度还挺快的 [rootlocalhost src]# tar -C /usr/local -xzf go1.8.1.linux-amd64.tar.gz 设置环境变量 [rootlocalhost src]# export PATH$PATH:…

java jsonobject 转对象_解析JSON中JSONObject的高级使用

文末会有读者福利简介:在程序开发过程中&#xff0c;在参数传递&#xff0c;函数返回值等方面&#xff0c;越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;同时也易于机器解析和生成、易于理解、阅读和撰写&#xff0c;而且Json采…

xfs支持oracle,让linux内核支持xfs文件系统

作/译者&#xff1a;叶金荣(Email:)&#xff0c;来源&#xff1a;http://imysql.cn&#xff0c;转载请注明作/译者和出处&#xff0c;并且不能用于商业用途&#xff0c;违者必究。 XFS 简介XFS 最初是由 Silicon Graphics&#xff0c;Inc. 于 90 年代初开发的。那时&#xff0c…

c语言打印菱形_没事了,搞一下C语言打印大小可变的菱形图案?

问题分析&#xff1a;菱形的大小size其实就是中间行中*号的个数&#xff0c;也是整个菱形的行数&#xff0c;其值必是奇数。问题的关键之一是如何确定每行中*号的个数。经过分析得知&#xff1a;当行i<(size1)/2时&#xff0c;该行的*号个数为n2*i-1&#xff0c;否则n2*&…

ListView 与 RecyclerView的创建与使用的异同

相同&#xff1a;1.在使用时&#xff0c;都需要先获取&#xff0c;再新建适配器&#xff0c;再用serAdapter方法绑定适配器 2.创建数据List&#xff0c;都是新建ArrayList 不同&#xff1a;1.在新建适配器类时&#xff0c;listview的适配器继承自ArrayAdapter,recyclerview的适…

测试驱动开发 测试前移_测试驱动开发–双赢策略

测试驱动开发 测试前移敏捷从业人员谈论测试驱动开发 &#xff08;TDD&#xff09;&#xff0c;所以许多关心代码质量和可操作性的开发人员也是如此。 我曾几何时&#xff0c;不久前设法阅读了有关TDD的文章。 据我了解&#xff0c;TDD的关键是&#xff1a; 编写测试&#xff0…

android timer后函数继续执行_Android内存异常机制(用户空间)_JE

常见的Android稳定性异常&#xff0c;有内核异常和Android层异常。内核异常也就是常说的“kernel panic”&#xff0c;简称KE异常&#xff1b;Android层异常又分为java层crash和Native层crash&#xff0c;简称JE、NE异常。此外&#xff0c;Android层异常还有应用ANR和system_Se…

oracle10 数据库审计,Oracle数据库审计用法实例

本节是从ORACLE METALINK的DOC:167293.1翻译整理而来的。通过举例的方式来说明ORACLE审计的用法。ORACLE的审计可以从语句级、对象本节是从Oracle METALINK的DOC:167293.1翻译整理而来的。通过举例的方式来说明ORACLE审计的用法。ORACLE的审计可以从语句级、对象级和权限级几个…

cefsharp 发送请求服务器_超高性能管线式HTTP请求(实践·原理·实现)

来源:https://www.cnblogs.com/lulianqi/p/8167526.html这里的高性能指的就是网卡有多快请求发送就能有多快&#xff0c;基本上一般的服务器在一台客户端的压力下就会出现明显延时。该篇实际是介绍pipe管线的原理&#xff0c;下面主要通过其高性能的测试实践&#xff0c;解析背…

oracle 启用闪回数据库,如何启用Oracle10g闪回数据库特性

为什么80%的码农都做不了架构师&#xff1f;>>>1.确认当前模式SYS AS SYSDBA on 29-MAR-05 >select flashback_on from v$database;FLA---NO2.检查/修改恢复区设置SYS AS SYSDBA on 29-MAR-05 >show parameter db_recovery_file_destNAME TYPE VALUE-----------…

nvme通用驱动_对领域驱动设计的理解与实践

领域驱动设计(Domain-Driven-Design)是一种针对大型复杂系统的领域建模与分析方法论。2003 年&#xff0c;Eric Evans 发布《Domain-Driven Design: Tackling Complexity in the Heart of Software》(领域驱动设计&#xff1a;软件核心复杂性应对之道)&#xff0c;其中定义了DD…

为什么不应该用Stream forEach替换for循环的3个原因

太棒了&#xff01; 我们正在将代码库迁移到Java8。我们将用函数替换所有内容。 扔掉设计模式。 删除面向对象。 对&#xff01; 我们走吧&#xff01; 等一下 Java 8已经问世了一年多&#xff0c;而这种兴奋又回到了日常业务中。 baeldung.com从2015年5月开始执行的一项非代…

使用NPOI库导入导出EXCEL

一、EXCEL 导入&#xff08;Excel 导入导出实际项目中会被封装成**Helper 本示例只对简单功能做演示&#xff09; NPOI 包引用 视图view {ViewBag.Title "NPOIExcel"; }<h2>NPOIExcel</h2> <form action"Url.Action("NPOIInport", &…