• 今天开始看另外一本网络爬虫的书。发现有好多内容重复了,所以跳着看了看。然后发现了一个书后的实战示例。
  • 给书后一个评价:这什么玩意!最后还是用了我自己的方法来实现对于这个知乎直播部分的爬取。
  • 今天顺着昨天的思路,首先看了看这个网页。发现:这个网页挺好的,返回回来的时候,直接就是完整的网页,这可算是省了很多的力气。
https://api.zhihu.com/lives/homefeed?includes=live
  • 所有关于直播板块的数据都存放在这个url中,直接提出之后,就可以进行访问。
  • 但是,尝试了一个之后,又发现问题了

  • 这样的一个页面,完整显示的数据,就直到讲座作者就完事了!然后那些个评论数据又是放在一个url里。好无语啊!
  • 后来终于在三级页面里找到了请求的这个网址,而且这个网址用于请求的属性,并不算难。本以为其中的sku_id属性用于表示的是原来的用户ID。其实这个评论的属性另有文章。
  • 太生气了,搞这么复杂。通过比对,发现了这个不同,我想应该存在于网页中的某个位置,因为在请求中,没有什么额外的请求。果然,在一堆的textarea中找到了这个属性。这个json复杂程度令人发指!

  • 最后还是提取出来,然后做了改造。
  • 示例代码
import csv
import json
import osimport requests
from bs4 import BeautifulSoupdef Collect():with open("../files/知乎.csv", "r", encoding='UTF-8') as csvfile:reader = csv.DictReader(csvfile)for row in reader:# 获取每个评论中的id号id = row["id"]# 这是一个直播模块的网址,用于参考。# https: // www.zhihu.com / lives / 919165878388535296tempUrl = "https://www.zhihu.com/lives/" + idprint(tempUrl)html = requests.get(url=tempUrl, headers=header)bsObj = BeautifulSoup(html.content, 'lxml', from_encoding='utf-8')# html = urlopen(tempUrl)# bsObj = BeautifulSoup(html, 'html.parser')# 找到这个论坛的创始人的标签Writer = bsObj.find("div", {"class": "UserCell-name-hzEyq"}).get_text()print("Writer:", Writer, '\n')# 查找到含有评论网页json的sku_id号TextArea = bsObj.find("textarea", {"id": "resolved"}).get_text()Json = json.loads(TextArea)sku_id = Json["appContext"]["__connectedAutoFetch"]["liveDetailsNew"]["data"]["skuGrading"]["sku_id"]print(sku_id)# 如果不存在这个文件,就要创建一个项目tempFileName = os.path.dirname("../files/" + id + ".csv")if not os.path.exists(tempFileName):os.makedirs(tempFileName)tempCsvFile = open("../files/" + id + ".csv", 'wt', newline='', encoding='utf-8')writer = csv.DictWriter(tempCsvFile, fieldnames=['author', 'comment'])# https://api.zhihu.com/darwin/hot_reviews?sku_id=969583563645173760&limit=10&offset=0commentUrl = "https://api.zhihu.com/darwin/hot_reviews?sku_id=" + sku_id + "&limit=10&offset=0"comment_res = requests.get(url=commentUrl, headers=header)for item in comment_res.json()["data"]:author = item["author"]["name"]comment = item["content"]print(author, ":", comment)writer.writerow({"author": author, "comment": comment})tempCsvFile.close()if __name__ == '__main__':# 将知乎直播模块的url网址存放进url变量中,将请求头设置完成url = "https://api.zhihu.com/lives/homefeed?includes=live"header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}# 发送请求response = requests.get(url=url, headers=header)print(response.text)# 设定一个用于存储讨论课题和id号的文件fileUrl = os.path.dirname("../files/知乎.csv")# 如果不存在这个文件,就要创建一个项目if not os.path.exists(fileUrl):os.makedirs(fileUrl)csvFile = open("../files/知乎.csv", 'wt', newline='', encoding='utf-8')writer = csv.DictWriter(csvFile, fieldnames=['title', 'id'])# 写入列标题,即DictWriter构造方法的fieldnames参数writer.writeheader()for item in response.json()["data"]:id = item["live"]["id"]title = item["live"]["subject"]print(id, ":" + title)writer.writerow({'title': title, 'id': id})csvFile.close()Collect()
  • 这里面,提供了两种BeautifulSoup解析的方式。调查了一下,主要是因为request.get返回的对象,和urlopen返回的对象不一样。request要使用lxml的解析器,而urlopen只需要使用html的解析器即可。
  • 然后今天也对csv文件进行了一个进一步的拓展学习。可以发现,之前就是直接写,今天进行了一个改进,就是对格式进行了调整。

不足之处

  • 主要就是最近读了代码整洁之道。我觉得这一段代码,就很不美。但是也是爬虫初学者。我之后会注意这方面的问题。尽量将方法普遍化。

Python爬虫——爬取知乎(实践)相关推荐

  1. Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中

    Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中 1.需要的Python模块 主要是requests模块,用于得到的网页的数据 安装命令为:pip install requests 2 ...

  2. 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: 1 # -*- c ...

  3. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  4. Python爬虫-爬取知乎(小结)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:小小科 ( 想要学习Python?Python学习交流 ...

  5. Python爬虫爬取知乎用户信息+寻找潜在客户

    [Python应用]寻找社交网络中的目标用户 日后的更新:由于是很久以前的课程设计项目,完整的源码已经不见了,关键的网页数据获取和解析的部分代码我在文章中已经贴出来了,但写的也不够好,如果想参考爬取知 ...

  6. python爬虫爬取知乎图片,轻松解决头像荒

    前言 最近逛知乎,发现了一个问题.         回答下很多好看的头像,因此我动了一个心思,想要制作一个小网页,可以随机返回一款好看的情头.心思既起,当然要开始付诸行动.但是想要制作如此一个网页,后 ...

  7. python爬虫知乎点赞_Python爬虫爬取知乎小结

    最近学习了一点网络爬虫,并实现了使用Python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出 ...

  8. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  9. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

最新文章

  1. php判断有没有分页,php分页怎么判断已经到了最后一页?
  2. 【MySQL】深入浅出剖析mysql事务锁机制 - 笔记
  3. idea编译器没有tomcat的选项解决方案
  4. repeater没有数据显示暂无数据,无记录
  5. 【图像融合】基于matlab对比度和结构提取多模态解剖图像融合【含Matlab源码 1539期】
  6. windows镜像_Windows 系统镜像下载地址
  7. 天龙八部单机服务器修改器,天龙八部 天佛降世多功能属性修改器
  8. Freeman链码,差分码,归一化链码,归一化差分码
  9. Java计算两点间的距离
  10. mysql stmt fetch_mysql_stmt_fetch()
  11. html网页中wmode,关于html:Quicktime-Wmode透明问题
  12. 【汇编语言】第三章 寄存器(内存访问)
  13. 最终分化的SH-SY5Y细胞为研究多巴胺激动剂的神经保护作用提供了一个模型系统
  14. 微信小程序开发实战(9):单行输入和多行输入组件
  15. commons-lang3 简介、中文文档、中英对照文档 下载
  16. winsock和winsock2冲突
  17. FPGA入门实验-寻迹小车的实现
  18. 【JavaSE】封装与继承,访问限定符的总结
  19. 纯前端实行—简单的用户信息记录界面
  20. #c语言计算某年某月的天数

热门文章

  1. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,逻辑回归模型)
  2. win10系统如何安装微软应用商店?
  3. 信息化监理在验收阶段的角色
  4. 阿里云盘太小啦,所以自己动手写了一个阿里云盘的搜索引擎
  5. 农业观光温室大棚都有哪些类别
  6. 春招从0到1offer的总结和经验分享
  7. 欧姆龙模块NC413的使用
  8. html怎么把字做成动画效果,利用纯CSS实现动态的文字效果实例
  9. 基于keil4和proteus实现的简易密码锁
  10. bpsk传输系统实验matlab,BPSK传输系统实验