文章目录

  • 前言
  • 注意点
  • 代码实例

前言

github:https://github.com/pasca520/Python3SpiderSet
知乎上有很多钓鱼贴,也成功的钓上了很多鱼,你懂的~~~
这里通过 python 爬了一些图片,总共大概有十几万张,仅供练习使用:

示例 python 库
爬取模块 request
解析模块 re
存储类型 存储图片到本地&七牛云存储

参考知乎文章(回答数平均3k以上):

  • 女生素颜能漂亮到什么程度?
  • 平常人可以漂亮到什么程度?
  • 你见过最漂亮的女生长什么样?
  • 拥有一双大长腿是怎样的体验?
  • 身材好是一种怎样的体验?
  • 女生什么样的身材算是好身材?

注意点

接口返回的 json 数据 content 模块中,包含图片的有四个参数,被包含在

<figure><noscript><img src='用户ID水印图片' data-default-watermark-src='知乎 logo水印图片' data-original='用户ID水印图片'/></noscript>
<img src=继承  data-default-watermark-src='知乎 logo水印图片' data-original='用户ID水印图片'/>
</figure>

分别是「img src、data-default-watermark-src、data-original、data-actualsrc」。
其中noscript标签是某些浏览器把Javascript禁用了才生效的,默认不生效。

不足:

  • 因为仅仅学习使用,所以只开单线程模式,未开启多线程加速
  • 对于错误异常未能很好的处理,我运行时没遇到

代码实例

# -*- coding: utf-8 -*-
import requests
import re
import math
import os
import random
import string
import time
from qiniu import Auth
from qiniu import BucketManager# 爬虫主体
def get_page(url, limit, offset):headers = {'authority': 'www.zhihu.com','x-ab-param': 'li_pay_banner_type=0;se_new_topic=0;ug_goodcomment_0=1;zw_sameq_sorce=999;zr_paid_answer_mix=mixed_20;se_backsearch=0;tp_qa_metacard=1;ug_follow_answerer=0;li_video_section=1;qap_ques_invite=0;se_webtimebox=1;se_amovietab=1;se_featured=1;soc_zcfw_shipinshiti=0;se_dnn_mt=0;se_entity_model=0;se_search_feed=N;se_ctr_pyc=0;se_billboardsearch=0;se_college_cm=1;tsp_hotlist_ui=3;ug_newtag=1;zr_km_special=close;zr_rec_answer_cp=close;zr_km_category=close;tp_header_style=1;tsp_vote=2;soc_zcfw_broadcast=0;ug_follow_answerer_0=0;ls_new_upload=1;ls_videoad=2;zr_cold_start=4;se_movietab=1;tp_sft=a;tsp_hotctr=1;tsp_billboardsheep2=2;top_test_4_liguangyi=1;tp_topic_head=0;zw_payc_qaedit=0;zr_km_recall=default;zr_infinity_member=close;se_webmajorob=0;se_sug=1;se_ltr_user=0;se_payconsult=5;li_qa_new_cover=1;se_mclick1=2;tp_sft_v2=d;top_v_album=1;tsp_newchild=4;pf_fuceng=1;se_cardrank_3=0;li_qa_cover=old;li_se_media_icon=1;zr_answer_rec_cp=open;zr_slot_cold_start=aver;se_cardrank_2=1;se_p_slideshow=0;soc_stickypush=0;pf_noti_entry_num=0;se_perf=0;tp_qa_toast=1;soc_bignew=1;soc_zcfw_badcase=0;tp_qa_metacard_top=top;li_album_liutongab=0;li_se_kv=0;li_se_xgb=0;zr_km_style=base;se_preset_tech=0;se_wannasearch=a;top_native_answer=6;ug_zero_follow=0;se_ltr_dnn_cp=0;li_purchase_test=0;zr_ans_rec=gbrank;zr_km_slot_style=event_card;zr_search_xgb=1;zr_km_recall_num=close;zr_filter=ignore_topics;se_expired_ob=0;zr_intervene=1;zr_test_aa1=0;se_zu_onebox=0;se_ctr_user=0;se_site_onebox=0;se_ltr_cp_new=1;li_se_paid_answer=0;zr_art_rec=base;se_club_post=5;se_adxtest=1;se_use_zitem=0;li_salt_hot=0;li_search_answer=3;li_se_vertical=1;zr_km_item_prerank=old;zr_km_prerank=new;zr_slotpaidexp=1;se_lottery=0;ug_fw_answ_aut_1=0;ls_zvideo_like=0;zr_rel_search=base;zr_new_commodity=0;se_spb309=0;se_waterfall=0;tp_sticky_android=2;pf_foltopic_usernum=50;se_ios_spb309=1;se_likebutton=0;se_colorfultab=1;se_cardrank_4=1;se_agency= 0;soc_special=0;soc_bigone=1;ug_follow_topic_1=2;qap_payc_invite=0;se_mobileweb=1;se_time_threshold=0;top_universalebook=1;soc_zuichangfangwen=6;ls_zvideo_license=0;se_sepciality=0;tsp_billboardhead=2;li_se_album_card=0;se_websearch=3;tsp_childbillboard=2;sem_up_growth=in_app;zr_video_rank=new_rank;zr_man_intervene=0;zr_prerank_heatscore=false;se_whitelist=1;tp_club_qa=1;ls_zvideo_trans=0;zr_km_item_cf=open;se_go_ztext=0;se_ctx=0;se_pro=0;pf_newguide_vertical=0;ug_zero_follow_0=0;se_auto_syn=0;top_new_feed=5;pf_creator_card=1;li_android_vip=0;zr_recall_heatscore=false;se_dnn_unbias=1;se_subtext=1;tp_club_qa_pic=1;li_hot_score_ab=0;li_vip_no_ad_mon=0;zr_article_new=close;se_hotsearch=1;top_ebook=0;se_cardrank_1=0;se_ad_index=10;tp_meta_card=0;soc_update=1;tp_m_intro_re_topic=1;li_se_heat=1;li_book_button=0;zr_video_rank_nn=new_rank;se_mclick=0;se_time=0.5;se_ab=0;se_zu_recommend=0;top_vipconsume=1;soc_notification=1;ls_fmp4=0;top_hotcommerce=1;top_ydyq=X;zr_km_answer=open_cvr;zr_video_recall=current_recall;zr_km_feed_prerank=new;se_hotmore=0;se_aa_base=1;se_college=default;li_se_section=0;zr_item_nn_recall=close;zr_km_topic_zann=new;se_webrs=1;se_topicfeed=0;se_bst=0;li_qa_btn_text=0;zr_km_feed_nlp=old;se_col_boost=0;soc_yxzl_zcfw=0;li_tjys_ec_ab=0;se_topiclabel=1;se_ctr_topic=0;se_hot_timebox=1;se_famous=1;top_quality=0;top_root=0','x-requested-with': 'fetch','user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36','cookie': '_zap=1e68d90d-24bc-466c-abaa-95b3742f7c5d; _xsrf=E53NvZThal0kfH2AIUDeqncRPeqoN6Wn; d_c0="AKCoTa74bw-PTntcCBsmKGuUufXYZkQblEE=|1557992311"; UM_distinctid=16ba3957d4448f-0ffe346615062f-37627e03-13c680-16ba3957d456ba; __utma=51854390.1918436468.1563268856.1563268856.1563268856.1; __utmz=51854390.1563268856.1.1.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/hot; __utmv=51854390.100-1|2=registration_date=20150917=1^3=entry_date=20150917=1; tst=r; q_c1=9a76ab9b024b4aca95937abb63762fdf|1570515114000|1558948626000; capsion_ticket="2|1:0|10:1572334589|14:capsion_ticket|44:MmFkOGVhN2I3N2RmNDU5ZWFjNTdhODBhNGNjNjhjZTM=|0ffb0e69befc1d3e70223353f74ca767fc9bbee629e0b923e8c16e36993dd60f"; z_c0="2|1:0|10:1572334607|4:z_c0|92:Mi4xVTZZWkFnQUFBQUFBb0toTnJ2aHZEeVlBQUFCZ0FsVk5EenFsWGdBbFJOZXpnRlhSYVNQU0JsSlg2Tng1V2hLV0RR|81669400aa05bf5ea49358713ca696c3c9dc625e991730ac04ba8531d0dcc983"; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1572838565,1572848709,1572864099,1572865376; CNZZDATA1272960301=797563411-1561816893-https%253A%252F%252Fwww.google.com.hk%252F%7C1572924243; tgw_l7_route=fd63c3ae6724333eae94c71ab6d69628; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1572926421',}params = (('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,paid_info_content;data[*].mark_infos[*].url;data[*].author.follower_count,badge[*].topics'),('limit', limit),('offset', offset),('platform', 'desktop'),('sort_by', 'default'),)response = requests.get(url, headers=headers, params=params)if response.status_code == 200:data = response.json()if not data['data']:print('没有数据!(%s)' % url)else:return data, data["paging"]["totals"]else:print('返回值: %s, url: %s' % (response.status_code, url))# 解析网页模块
def parse_json(data):# urls_one_set = []for info in data["data"]:# name = info["author"]["name"]pattern = re.compile(r'img src=\"(https://.*?)\"', re.S)urls = re.findall(pattern, info['content'])# urls_one_set.extend(urls)  # 在列表末尾一次性追加另一个序列中的多个值,即将每页的链接放入一个列表返回yield from urls# 下载图片,保存到本地
def download_img(urls_one_set, title, num):file_path = './img'# local_time = time.strftime('%Y_%m_%d_%H:%M:%S', time.localtime(time.time()))try:os.makedirs(file_path, exist_ok=True)for img_url in urls_one_set:num += 1random_string = ''.join(random.choices(string.ascii_letters +string.digits,k=15))with open('./img/{}|{}|{}.jpg'.format(num, title, random_string), 'wb') as f:res = requests.get(img_url)f.write(res.content)print("正在保存第%s张图片" % num)time.sleep(5)  # 休息下,毕竟学习,对让人家服务器xxx了return num  # 必须返回 num,否则局部变量 num 自增的值不生效except IOError as e:print("写入失败", e)except Exception as e:print("发生错误", e)# 保存到七牛云存储, 官网文档查看 fetch 接口:https://developer.qiniu.com/kodo/sdk/1242/python
def save_qiniu(urls_one_set, title, num):access_key = 'xxxxx'  # 七牛的 ak,打开https://portal.qiniu.com/user/key获得secret_key = 'xxxxx'  # 七牛的 sk, 打开https://portal.qiniu.com/user/key获得bucket_name = 'app-download'q = Auth(access_key, secret_key)bucket = BucketManager(q)for img_url in urls_one_set:num += 1local_time = time.strftime('%Y_%m_%d', time.localtime(time.time()))random_string = ''.join(random.choices(string.ascii_letters +string.digits,k=15))key = '{}/{}|{}|{}.jpg'.format(local_time, num, title, random_string)ret, info = bucket.fetch(img_url, bucket_name, key)print("正在保存第%s张图片" % num)assert ret['key'] == keyreturn numif __name__ == '__main__':offset = 5  # 页数,0代表第一页limit = 5  # 一页几个回答num = 0  # 初始下载数# 知乎文章回答数平均3k以上ZhiHuArticle = {'305888519': '女生素颜能漂亮到什么程度?','50426133': '平常人可以漂亮到什么程度?','34243513': '你见过最漂亮的女生长什么样?','285321190': '拥有一双大长腿是怎样的体验?','26037846': '身材好是一种怎样的体验?','333026642': '女生什么样的身材算是好身材?'}for key in ZhiHuArticle.keys():url = 'https://www.zhihu.com/api/v4/questions/{}/answers'.format(key)title = ZhiHuArticle[key]json_data, answer_totals = get_page(url, limit, offset)all_pages = math.ceil(answer_totals / offset)  # 先精确除,然后值向上取整for next_page in range(0, all_pages * 5, 5):json_data, answer_totals = get_page(url, limit, next_page)urls_one_set = parse_json(json_data)# num = download_img(urls_one_set, title, num)num = save_qiniu(urls_one_set, title, num)print('待爬问题页爬取结束,欢迎下次再来!')

Python3爬虫项目集:爬取知乎十几万张小姐姐美图相关推荐

  1. 知乎python练手的_Python—爬虫之初级实战项目:爬取知乎任一作者的文章练手

    爬虫之初级实战项目:爬取知乎任一作者的文章练手 在正式上代码之前,先过一遍之前所学知识的框架内容,温故而知新!!! 接下来我们直接上代码,一定要手敲代码.手敲代码.手敲代码!!! import req ...

  2. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

  3. python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息

    python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...

  4. python3爬虫之多线程爬取英雄联盟所有皮肤图片

    python3爬虫之多线程爬取英雄联盟所有皮肤图片 线程不要太高,容易出错,大约用时1分钟左右. import requests import json import os import thread ...

  5. 通过爬取微博评论,发现好看的小姐姐...

    通过爬取微博评论,发现好看的小姐姐... 前言 页面分析 技术栈 架构 关键点 成果 前言 刷微博刷到一个博主求好看小姐姐照片的微博,内心不由得轻蔑一笑,好看的小姐姐凭啥理你,滑到评论区,我瞬间就酸了 ...

  6. python requests cookie保存_Python爬虫教程:爬取知乎网

    知乎已经成为了爬虫的训练场,本文利用Python中的requests库,模拟登陆知乎,获取cookie,保存到本地,然后这个cookie作为登陆的凭证,登陆知乎的主页面,爬取知乎主页面上的问题和对应问 ...

  7. python3爬虫模拟登录爬取教务系统成绩单(获取cookie操作)

    前言 今天来写写爬取教务系统的爬虫,此次的爬虫目的是爬取教务系统里面的成绩单,涉及到的库依旧是selenium,re,beautifulsoup,Options,今天多了个csv库用来处理爬取的数据, ...

  8. 【知乎热榜爬虫】python爬取知乎热榜问题及答案

    所用库 requests xpath解析库 multiprocessing多进程 pymysql数据库操作库 实战背景 主要是爬取知乎热榜的问题及点赞数比较高的答案,通过requests请求库进行爬取 ...

  9. php实现爬取知乎神回复数据——做成小程序上线

    知乎真是一个神奇的地方,经常会看到很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无穷.这篇文章主要介绍了php实现爬取知乎神回复简单爬虫代码分享(看了网上的python版本改写的,写的又 ...

最新文章

  1. nginx源代码执行过程(一)
  2. Linux学习之diction的编译与使用
  3. 2152:聪聪可可(点分治)
  4. 数据结构笔记(二十八)-- 图的广度优先遍历
  5. 运算放大电路_电工CChap03 集成运算放大电路与应用
  6. linux内核IO模块plug/unplug机制
  7. 点云的无序性_三维点云分类与分割-PointNet
  8. 全国银行开户行名称查询数据库,包括行号、电话、地址、
  9. mfc获取计算机的连接端口,[求助]请问socket编程里,服务器端用什么函数获取客户端的地址与端口...
  10. Matlab画正态分布并标点
  11. 在互联网行业干数据分析师,都需要掌握哪些技能?编程语言?软件工具?
  12. 医院预约挂号系统(Java+SSM+MySQL+Maven)
  13. 出现 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation 问题
  14. Python爬虫:(亲测,已解决!)解决在使用谷歌浏览器的开发者工具时,没有Referer防盗链缺失问题。
  15. 【漏洞复现】Moniker禁用绕过漏洞|ole逻辑漏洞(CVE-2017-8570)
  16. 正则,把字符串/替换成-
  17. 快速画正弦波、方波、三角波——Visio制图总结(六)
  18. 派森小镇(三)被抛弃的·小列表
  19. 2021-10-03
  20. 百度地图jsAPI使用总结(四)散点地图之mapv

热门文章

  1. 电阻之上拉电阻与下拉电阻详解(转)
  2. 美国工程师爸爸自述:我为什么让孩子学少儿编程
  3. invocationHandler和invocation的区别
  4. 补充3 需求分配和工厂选址模型(工厂和仓库同时选址)——基于java和cplex的实现
  5. 游戏建模贴图怎么学?腾讯主美分享5种高效方法
  6. java中带参数匿名内部类_Java内部类之匿名内部类
  7. 生成 .chm 格式帮助文档
  8. java sleep原理_Java线程休眠(sleep)示例
  9. 那几款手机壳S级鸿蒙,看看这几款高级手机壳,拿出去绝对很skr
  10. 软件工程实践————结对作业二