python钓鱼网站_【Python 爬虫思路分析】抓取某乎钓鱼贴图片
可以说爬虫是学习 Python 的入门必修课。当能独立写出第一个完整的爬虫的时候,我们已经迈出了一大步。因为在这过程中,我们已经学会了如何查看文档,学会使用 Python 相关库的操作,怎样使用 Chrome 的开发者工具(相关工具)和把抓取的数据保存到数据库中等等一系列操作,当然收获最多的还是学习 Python 的自信心。
本文除 Python 相关库的使用外,还会涉及到 mongo 数据库的使用。
整体思路
首先我们需要收集知乎各类钓鱼贴,这一步可以使用爬虫(通过爬取别人已经收集的钓鱼贴,或者各种社区可能已有钓鱼贴专栏等)获取,也可以在浏览知乎时,发现合适的贴子手动添加。
我们需要将钓鱼贴的 ID 存入数据库中,爬虫运行时读库获取需要爬取的目标贴。
通过写一个爬虫,生成任务池多线程调用。将获取到的答案数据清洗,只收集答案中的图片。
存入库中的结构和知乎的类似:答案集合保存所有答案,每一个答案是一条独立的文档。可能写的有点绕。
具体结构类似这种结构:
{
"Answer": [
{
"id": 1,
"question_id": "xxx",
"title": "xxx",
"author": "xxx",
"content: [
"imgUrl",
"..."
]
},
{
"id": 2,
"question_id": "xxx",
"title": "xxx",
"author": "xxx",
"content: [
"imgUrl",
"..."
]
},
...
]
}
其中 Answer 为数据库的集合,集合中的每一项是一条回答。
用这种格式保存的好处是我们只需通过贴子的 ID 查询答案即可,保存起来也非常方便。
知乎爬虫
开始之前
在开始之前需要安装项目依赖,只用到两个常用库:
python3 -m pip install requests pymongo
分别用来请求 URL 和操作数据库。
安装完成后记得启动 mongo 服务。
Spider
爬虫代码比较简单,代码不过百行,关键找到知乎答案的接口,解析即可。而且这个接口也是非常好找的。
用 Chrome 的开发者工具一下就找到了...
![知乎 API 截图]()
接口也没有任何加密或权限限制,在请求头中加入 Cookies 就可以了。是不是突然觉得很简单?
只要我们控制好频率,不要影响到知乎服务就行了。毕竟我们只是想获取答案而已。
通过 Chrome 开发者工具分析,请求携带了如下参数,我们只用到 limit 和 offset,用来控制接口返回的数量和返回的位置。
include: data.is_normal,admin_closed_comment,reward_info,is_collapsed,annotation_action,annotation_detail,collapse_reason,is_sticky,collapsed_by,suggest_edit,comment_count,can_comment,content,editable_content,voteup_count,reshipment_settings,comment_permission,created_time,updated_time,review_info,relevant_info,question,excerpt,relationship.is_authorized,is_author,voting,is_thanked,is_nothelp,is_labeled,is_recognized,paid_info;data.mark_infos.url;data.author.follower_count,badge.topics
offset:
limit: 3
sort_by: default
platform: desktop
完整的请求 URL 是:
https://www.zhihu.com/api/v4/questions/21115811/answers?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%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_labeled%2Cis_recognized%2Cpaid_info%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cbadge%5B*%5D.topics&offset=&limit=3&sort_by=default&platform=desktop
我们只要动态更改其中的 question,limit 和 offset 就可以了。
我们通过接口返回的答案总数,判断需要翻多少页,当然也可以通过接口返回的 next 和 previous 来获取下一页或前一页答案链接。知乎的接口设计的非常方便啊。
当然在翻页抓取的时候切记设置睡眠时间,放在服务器上爬的慢一点也没关系。不要影响到知乎的正常服务。
请求成功后我们就可以根据自己的需求,存储数据了,至于如何判断答案中是否有图片,可以参考以下代码。
使用到了 lxml 库,也可以使用 re 库代替。
# 部分代码
@staticmethod
def parse_content(content):
"""解析答案中的 content,直接获取图片"""
if "
img_list = set(etree.HTML(content).xpath("//img/@data-original"))
return list(img_list)
else:
return []
先判断回答中是否有 img 标签,如果没有直接返回空列表,如果有的话,通过 data-original 属性获取原始大小的图片链接。也是返回一个包含图片链接的列表类型。
在入库的时候,我们通过 parse_content 的返回判断是否需要入库,如果是 [] 就跳过,如果列表不为空就入库。这样在之后展示的时候不会只展示作者信息,却没有回答的情况了(其实是该作者回答中没有图片)。
调用爬虫
当我们完成上述操作,就可以单独写一个文件使用多线程调用爬虫了。
from concurrent.futures import ThreadPoolExecutor
qid_list = db.get_all_question()
crawler_list = [ZhihuSpider(qid).run for qid in qid_list]
with ThreadPoolExecutor(max_workers=4) as executor:
future = [executor.submit(task) for task in crawler_list]
for f in future:
f.result()
qid_list 来自查库获取所有的知乎贴子 ID。
使用 concurrent.futures 库并行执行任务,在我们的代码里使用 ThreadPoolExecutor,它使用线程池来异步执行调用。
max_workers 控制最多线程的使用,本例中使用最多4个线程执行任务。
具体文档见 ThreadPoolExecutor,是对 thread 库的封装,让我们使用线程时更加简单。
最后总结一下整体思路:我们先把需要抓取的 ID 存入数据库,作为任务池,爬虫调取任务池中的 ID,将爬取结果再保存到数据库。
这样就完成了从爬虫到入库。
python钓鱼网站_【Python 爬虫思路分析】抓取某乎钓鱼贴图片相关推荐
- python钓鱼网站_学习笔记6.0 Django入门创建一个钓鱼网站
太久没写博客了,2020年上半年荒废了大部分时光.从现在开始改变吧,学习django开发的知识. 用了两天的时间,终于学会了如何用pycharm开发django,会自己写一个hello world.虽 ...
- python 无头模式_搭建谷歌浏览器无头模式抓取页面服务,laravel-php-python-docker !!!...
背景: 公司管理系统需要获取企业微信页面的配置参数如企业名.logo.人数等信息并操作,来隐藏相关敏感信息并自定义简化企业号配置流程 第一版已经实现了扫码登录获取cookie,使用该cookie就能获 ...
- python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取
如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...
- python 爬虫学习:抓取智联招聘网站职位信息(二)
在第一篇文章(python 爬虫学习:抓取智联招聘网站职位信息(一))中,我们介绍了爬取智联招聘网站上基于岗位关键字,及地区进行搜索的岗位信息,并对爬取到的岗位工资数据进行统计并生成直方图展示:同时进 ...
- python 爬虫学习:抓取智联招聘网站职位信息(一)
近期智联招聘的网站风格变化较快,这对于想爬取数据的人来说有些难受.因此,在前人基础上,我整理了针对智联招聘网站的最新结构进行数据抓取的代码,目前支持抓取职位搜索列表页面的列表项,并将职位列表以exlc ...
- python爬虫关键词抓手机号_通过Python爬虫按关键词抓取相关的新闻
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 如今各大网站的反爬机制已经可以说是到了丧心病狂的程度,比如大众点评的字符加 ...
- python批量读取图片并批量保存_Python爬虫:批量抓取花瓣网高清美图并保存
原标题:Python爬虫:批量抓取花瓣网高清美图并保存 昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文 ...
- python爬虫代码房-Python爬虫一步步抓取房产信息
原标题:Python爬虫一步步抓取房产信息 前言 嗯,这一篇文章更多是想分享一下我的网页分析方法.玩爬虫也快有一年了,基本代码熟悉之后,我感觉写一个爬虫最有意思的莫过于研究其网页背后的加载过程了,也就 ...
- 爬虫python书籍-Python爬虫案例:抓取豆瓣编程类高评分书籍
对于很多正在学习计算机的朋友来说,选择合适的学习材料是非常重要的. 本文将通过 Python 来爬取豆瓣编程类评分大于 9.0 的书籍. 此案例很适合入门爬虫的朋友学习,总共也就 3 个函数. 下图是 ...
- python爬网站数据实例-如何用Python爬数据?(一)网页抓取
如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...
最新文章
- 一个用于分页的page类
- dcnctf-web-wp(部分)
- linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
- mysql启动命令 windows_Windows下Nginx的启动停止等基本操作命令详解
- linux 版本的scipy,linux安装scipy
- java使用Encoding导什么包_String getEncoding()
- 电脑网络基础知识:ipconfig/all命令及nslookupDns查询命令
- win7登录密码破解工具
- Matlab自带的曲线拟合程序
- 吊炸天!15岁成杀人犯,监狱里学编程,37岁获释后年薪70万
- 手把手教你安装华为网络模拟器及设备注册
- 温故而知新:IIR滤波器设计的方法,幅频计算和参数理解
- ps抠头发丝教程图解:ps抠图抠头发丝的方法
- StructedStreaming Kafka 排错(AbstractCoordinator: Marking the coordinator *dead for grou
- pli测试50题题库_【马士基销售代表面试】性格测试+12分钟50道题。-看准网
- Jumpserver界面设置及界面功能
- mysql碎片整理innodb_Innodb表碎片整理
- BFU C.yi的书包 01背包【水题】
- diary_mna_2016
- 【前端大屏实战1】Vue+Echarts -- 大屏简介初体验 => 大屏自适应缩放解决方案 => 使用transform:scale => 组件化抽离ScaleBox=>【两分钟实现大屏宽高等比例】
热门文章
- 融资租赁,成为疫情过后翻身点?
- 计算机考试应用选择题,2017计算机应用基础考试选择题「附答案」
- HTML5七夕情人节表白网页制作【抖音超火3D炫酷魔方】HTML+CSS+JavaScript
- 小程序云开发:私家书柜
- Bzoj1933 [Shoi2007]Bookcase 书柜的尺寸
- 计算机录像怎么操作,电脑如何录制视频?掌握这些方法就可以了
- rsync 操作及部署
- 扎心!来自互联网er的2019年度总结,看完笑着流泪……
- CTFshow web入门——信息搜集
- 电子产品设计流程_“创意点亮警大”首届文创产品设计大赛等你来战!