爬取知乎某个问题下所有的图片

最近在逛知乎时,看到这么一个问题

最高赞的答案写了个爬虫,把所有的照片都爬下来了。

嘿嘿嘿,技术的力量

正好自己也在学习,加上答主的答案是很久之前的,知乎已经改版了,所以决定自己用Python3写一个练习一下(绝对不是为了下照片)....

设个小小的目标:爬取所有“女性”程序员的照片。

首先是要知道“总的回答数”,这个比较简单:

url="https://www.zhihu.com/question/37787176"html=requests.get(url,headers=headers).textanswer=BeautifulSoup(html,"lxml").find("h4",class_="List-headerText").find("span").get_text()answer_num=int(re.sub("\s\S+","",answer))

知乎加载内容是通过点击“更多”,然后加载出20个回答,利用selenium模拟登陆太慢太麻烦,所有查看知乎的Ajax请求比较靠谱,此处感谢崔大神的教学(http://cuiqingcai.com/4380.html)。

通过浏览器,可以看到每次点击更多,请求内容是一个“fetch”类型的文件和相关的图片(jpeg),这个"fetch"文件包含了回答者信息和回答内容

通过json处理后,通过gender判断回答者性别(0为女,1为男)。

抓取“content”下的所有src属性的图片链接,就搞定了。

附注:请求头要加一个"authorization"

下面是全代码:

import requestsimport osimport jsonfrom bs4 import BeautifulSoupimport reimport time

headers = {    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36‘,    "Connection": "keep - alive",    "Accept": "text/html,application/xhtml+xml,application/xml;",    "authorization": "Bearer Mi4wQUFEQVB4VkNBQUFBVU1MWktySDJDeGNBQUFCaEFsVk5TZ0YyV1FBaGsxRnJlTFd3ZGR6QzZrTXptcDFuWGNOQk5B|1498313802|2d5466ef4550588f5fc28553ea8981e7a4e398ad"    }isExists = os.path.exists("D:/crawler_study/zhihu")if not isExists:    os.makedirs("D:/crawler_study/zhihu")    os.chdir("D:/crawler_study/zhihu")else:    os.chdir("D:/crawler_study/zhihu")

url="https://www.zhihu.com/question/37787176"html=requests.get(url,headers=headers).textanswer=BeautifulSoup(html,"lxml").find("h4",class_="List-headerText").find("span").get_text()answer_num=int(re.sub("\s\S+","",answer))url_prefix="https://www.zhihu.com/api/v4/questions/37787176/answers?sort_by=default&include=data%5B%2A%5D.is_normal%2Cis_collapsed%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B%2A%5D.author.follower_count%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=20&offset="offset=0

while offset < answer_num:    answer_url=url_prefix+str(offset)    html=requests.get(answer_url,headers=headers).text    content=json.loads(html)["data"]    for row in content:        gender=row["author"]["gender"]        if gender == 0:            answer=row["content"]            pic_list=BeautifulSoup(answer,‘lxml‘).find_all("img")            for pic in pic_list:                down_url=pic["src"]                if down_url.startswith("http"):                    name=re.sub(".*/","",down_url)                    file=open(name,"ab")                    print("开始下载:",name)                    file.write(requests.get(down_url).content)                    print("下载完:", name)                    file.close()        else:            pass    offset+=20    time.sleep(3)
				
时间: 2024-10-29 19:12:36

爬取知乎某个问题下所有的图片的相关文章

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be

scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)

  python版本  python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www.zhihu.com/signup?next=%2F)这个页面, 爬取知乎,首先要完成登录操作,登陆的时候观察往那个页面发送了post或者get请求.可以利用抓包工具来获取登录时密码表单等数据的提交地址. 1.利用抓包工具,查看用户名密码数据的提交地址页就是post请求,将表单数据提交的网址,经过查看

利用 Scrapy 爬取知乎用户信息

思路:通过获取知乎某个大V的关注列表和被关注列表,查看该大V和其关注用户和被关注用户的详细信息,然后通过层层递归调用,实现获取关注用户和被关注用户的关注列表和被关注列表,最终实现获取大量用户信息. 一.新建一个scrapy项目 scrapy startproject zhihuuser 移动到新建目录下: cd zhihuuser 新建spider项目: scrapy genspider zhihu 二.这里以爬取知乎大V轮子哥的用户信息来实现爬取知乎大量用户信息. a) 定义 spdier.p

爬虫---Beautiful Soup 爬取知乎热榜

前两章简单的讲了Beautiful Soup的用法,在爬虫的过程中相信都遇到过一些反爬虫,如何跳过这些反爬虫呢?今天通过豆瓣网写一个简单的反爬中 什么是反爬虫 简单的说就是使用任何技术手段,阻止别人批量获取自己网站信息的一种方式.关键也在于批量. 反反爬虫机制 增加请求头---headers为了模拟更真实的用户场景 更改IP地址---网站会根据你的IP对网站访问频密,判断你是否属于爬虫 ua限制---UA是用户访问网站时候的浏览器标识,其反爬机制与ip限制类似 模拟帐号登录----通过reque

爬取知乎Python中文社区信息

爬取知乎Python中文社区信息,https://zhuanlan.zhihu.com/zimei 1 import requests 2 from urllib.parse import urlencode 3 from pyquery import PyQuery as pq 4 from pymongo import MongoClient 5 import json 6 import time 7 8 base_url = 'https://www.zhihu.com/api/v4/co

爬取知乎热榜标题和连接 (python,requests,xpath)

用python爬取知乎的热榜,获取标题和链接. 环境和方法:ubantu16.04.python3.requests.xpath 1.用浏览器打开知乎,并登录 2.获取cookie和User-Agent 3.上代码 1 import requests 2 from lxml import etree 3 4 def get_html(url): 5 headers={ 6 'Cookie':'', 7 #'Host':'www.zhihu.com', 8 'User-Agent':'Mozill

爬取赶集网二手物品下所有物品的信息

四周爬虫课第二周的练习,爬取赶集网二手物品下所有物品的信息.大致思路:1.爬取频道页url:2.爬取商品详情页url,写入mongodb,url_list表:3.从url_list表读取url,爬取商品信息,写入mongodb,p_info表 分成3个py文件:1.channel_url.py,获取频道页url:2.page_parse.py,主要是2个爬虫函数,分别完成2个数据表的写入:3.main.py,主程序文件,也就是本文件,开启多进程,完成整个工作 最后顺利完成任务,感觉现在赶集真不行

基于webmagic的爬虫小应用--爬取知乎用户信息

听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Java要30行. 这里推荐大家一个大牛做的java爬虫框架 [WebMagic] 文档简单易懂!java爬虫开发的福利啊! 一起来动手做一个小应用吧! 爬虫小应用–知乎用户信息 爬虫思想有3步 1. 抽取目标链接 2. 抽取需要的信息 3. 处理数据 一. 抽取目标链接 (确定入口地址,这里的入口是ht

python爬虫——爬取知乎上自己关注的问题

与之前爬的网站图片的不同的是,现在爬取的是要自己个人的关注的东西,所以需要做到模拟登录.模拟登录的原理是登录网站后,在浏览器上获取保存的cookies信息,填充之后与请求一起发送. 如果前面的爬取图片的会爬取了,对于这个解析字符串的也没有多大问题了. 一直看着知乎上很多程序员把自己关注的人的答案爬下来之后整理来看,那个时候开始又开始对爬虫这个东西特别感兴趣,对一个妹纸在美国搭了搭了个环境,爬了Twitter后进行数据分析的行为更是佩服,对方是个妹纸,但不是程序员,嗯,她自己还说代码写得丑,用代码