喜欢去知乎炸鱼?用python吧

知乎高赞贴:

有一双大长腿是什么体验?

有一副迷人的身材是什么体验?

别用手机费劲的翻了,python帮你一臂之力

import re
import requests
import os
import urllib.request
import ssl

from urllib.parse import urlsplit
from os.path import basename

# 全局禁用证书验证
ssl._create_default_https_context = ssl._create_unverified_context

headers = {
    ‘User-Agent‘: "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
    ‘Accept-Encoding‘: ‘gzip, deflate‘
}

def mkdir(path):
    if not os.path.exists(path):
        print(‘新建文件夹:‘, path)
        os.makedirs(path)
        return True
    else:
        print(u"图片存放于:", os.getcwd() + os.sep + path)
        return False

def download_pic2(img_lists, dir_name):
    print("一共有{num}张照片".format(num=len(img_lists)))

    # 标记下载进度
    index = 1

    for image_url in img_lists:
        file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])

        # 已经下载的文件跳过
        if os.path.exists(file_name):
            print("文件{file_name}已存在。".format(file_name=file_name))
            index += 1
            continue

        auto_download(image_url, file_name)

        print("下载{pic_name}完成!({index}/{sum})".format(pic_name=file_name, index=index, sum=len(img_lists)))
        index += 1

def auto_download(url, file_name):
    # 递归下载,直到文件下载成功
    try:
        urllib.request.urlretrieve(url, file_name)
    except urllib.request.ContentTooShortError:
        print("文件下载不完整,重新下载。")
        auto_download(url, file_name)
    except urllib.request.URLError:
        print("网络连接出错,尝试重新下载。")
        auto_download(url, file_name)

def download_pic(img_lists, dir_name):
    print("一共有{num}张照片".format(num=len(img_lists)))
    for image_url in img_lists:
        response = requests.get(image_url, stream=True)
        if response.status_code == 200:
            image = response.content
        else:
            continue

        file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])

        try:
            with open(file_name, "wb") as picture:
                picture.write(image)
        except IOError:
            print("IO Error\n")
            continue
        finally:
            picture.close()

        print("下载{pic_name}完成!".format(pic_name=file_name))

def get_image_url(qid, headers):
    # 利用正则表达式把源代码中的图片地址过滤出来
    # reg = r‘data-actualsrc="(.*?)">‘
    tmp_url = "https://www.zhihu.com/node/QuestionAnswerListV2"
    size = 10
    image_urls = []

    session = requests.Session()

    while True:
        postdata = {‘method‘: ‘next‘,
                    ‘params‘: ‘{"url_token":‘ + str(qid) + ‘,"pagesize": "10",‘ + ‘"offset":‘ + str(size) + "}"}
        page = session.post(tmp_url, headers=headers, data=postdata)
        ret = eval(page.text)
        answers = ret[‘msg‘]
        print(u"答案数:%d" % (len(answers)))

        size += 10

        if not answers:
            print("图片 URL 获取完毕, 页数: ", (size - 10) / 10)
            return image_urls

        # reg = r‘https://pic\d.zhimg.com/[a-fA-F0-9]{5,32}_\w+.jpg‘
        imgreg = re.compile(‘data-original="(.*?)"‘, re.S)

        for answer in answers:
            tmp_list = []
            url_items = re.findall(imgreg, answer)

            for item in url_items:  # 这里去掉得到的图片 URL 中的转义字符‘\\‘
                image_url = item.replace("\\", "")
                tmp_list.append(image_url)

            # 清理掉头像和去重 获取 data-original 的内容
            tmp_list = list(set(tmp_list))  # 去重
            for item in tmp_list:
                if item.endswith(‘r.jpg‘):
                    print(item)
                    image_urls.append(item)

        print(‘size: %d, num : %d‘ % (size, len(image_urls)))

if __name__ == ‘__main__‘:
    title = ‘拥有一副令人羡慕的好身材是怎样的体验?‘
    question_id = 297715922

    # title = ‘身材好是一种怎样的体验?‘
    # question_id = 26037846

    # title = ‘女孩子胸大是什么体验?‘
    # question_id = 291678281

    # title = ‘女生什么样的腿是美腿?‘
    # question_id = 310786985

    # title = ‘你的择偶标准是怎样的?‘
    # question_id = 275359100

    # title = ‘什么样才叫好看的腿?‘
    # question_id = 63727821

    # title = ‘身材对女生很重要吗?‘
    # question_id = 307403214

    # title = ‘女生腿长是什么样的体验?‘
    # question_id = 273711203

    # title = ‘女生腕线过裆是怎样一种体验?‘
    # question_id = 315236887

    # title = ‘有着一双大长腿是什么感觉?‘
    # question_id = 292901966

    # title = ‘拥有一双大长腿是怎样的体验?‘
    # question_id = 285321190

    # title = ‘大胸女生如何穿衣搭配?‘
    # question_id = 26297181

    # title = ‘胸大到底怎么穿衣服好看?‘
    # question_id = 293482116

    zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id)
    path = str(question_id) + ‘_‘ + title
    mkdir(path)  # 创建本地文件夹
    img_list = get_image_url(question_id, headers)  # 获取图片的地址列表
    download_pic2(img_list, path)  # 保存图片

原文地址:https://www.cnblogs.com/pyyu/p/10898998.html

时间: 2024-10-27 08:03:48

喜欢去知乎炸鱼?用python吧的相关文章

很喜欢的知乎回答;

<来自知乎:https://www.zhihu.com/question/22921426/answer/23330366> 首先,少年,答应别人的承诺,就一定要兑现. 我以前啊,和你一样,很想成为一个很厉害很厉害很厉害的人. 喜欢看热血的东西,幻想自己是屠龙的勇士,登塔的先锋,我左手有剑,右手有光,没头没脑的燃烧自己,敌人的骑军来了,我说你们何人堪与之战,我的女人在等我. 后来我现实了一点,我觉得我要成为那种说走就走,说日就日的男人,我梳大背头,流浪在欧洲或者新几内亚的,我拍孩子,拍野兽,拍

爬去知乎百万用户信息之UserTask

UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 用户主页的uRL格式为"https://www.zhihu.com/people/"+url_token+"/following"; public UserManage(string urltoken) { url_token = urltoken; } 先封装一个获

模拟登录知乎selenium在python中

from selenium import webdriver from scrapy.selector import Selector browser = webdriver.Chrome(executable_path="D:/Temp/chromedriver.exe") # browser.get("https://www.zhihu.com/signup?next=%2F") browser.get("https://www.zhihu.com/s

用Python做一个知乎沙雕问题总结

用Python做一个知乎沙雕问题总结 松鼠爱吃饼干2020-04-01 13:40 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 数据森麟 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 这两天偶然上网的时候,被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引,本以为只是小打小闹,殊不知这个问题却在知乎上引发了强烈共鸣,浏览次数500W+,

python admin管理页面进不去的方法

python admin管理页面进不去 by 伍雪颖 python manage.py shell from django.contrib.auth.models import User user =User.objects.get() print user 看看有什么账号,然后修改密码进去 user =User.objects.get(username='admin') user.set_password('new_password') user.save()

python知乎内容抓取(redis存储)

因为平时喜欢上知乎,发现其话题是一个有向无环图(自己介绍说得),一级一级往上最后到根话题,所以我就想尝试从根话题一级一级往下将其全部内容爬取.最后实践过程中发现自己想多了..有以下三个问题: 1.数据量巨大,单台电脑能力肯定不够.我这里只抓取了话题结构和话题对应的单个页面(不翻页)的一些呈现信息,没有抓取具体问题回答的内容. 2.如果直接连续抓取,没多少次就会被知乎检测到异常,这里使用代理ip可以解决. 3.最麻烦的是要查看所有话题结构必须要登录(如下图示例显示的子话题是可以抓到的,但是点击查看

【Python】初学编程适合学Python?其有何用?

初学编程适合学Python?其有何用? 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多因素造成了,当然市场需求的重要因素.吴军博士对大数据流行的解释与python流行或许有些默契.数据一直以来都存在,只是在历史条件下,由于计算性能和技术发展的原因,与之匹配的数据处理技术还不是很先进,以至于很多数据被我们舍弃了.同样,python语言简洁流畅等多种优点,也会让第一次接触

《转》从0到100——知乎架构变迁史

转载自infoQ 也许很多人还不知道,知乎在规模上是仅次于百度贴吧和豆瓣的中文互联网最大的UGC(用户生成内容)社区.知乎创业三年来,从0开始,到现在已经有了100多台服务器.目前知乎的注册用户超过了1100万,每个月有超过8000万人使用:网站每个月的PV超过2.2亿,差不多每秒钟的动态请求超过2500. 在ArchSummit北京2014大会上,知乎联合创始人兼 CTO 李申申带来了知乎创业三年多来的首次全面技术分享(幻灯片下载).本文系根据演讲内容整理而成. 初期架构选型 在2010年10

Python资料&amp; 个人日常总结 _20151220

后期有时间再排版. 后面越来越乱了.没时间整理分类 不嫌麻烦 就打开链接试试吧. 这是我之前为同学准备的,也是我从入门以来搜集的资源 适合以Python为第一个语言来学习编程的同学. 下面这个重要,可以先看看.再往下看.或者通览一遍 有没有你需要的. --> 编程入门指南 v1.4 http://zhuanlan.zhihu.com/xiao-jing-mo/19959253 ???????????? 写给 编程入门者 : __更新关于 0编程者接触Python的知乎讨论 https://www