Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

Python进阶者
• 阅读 320

大家好,我是皮皮。

一、前言

前几天在Python最强王者交流群【德善堂小儿推拿-瑜亮老师】分享了一个关于Python网络爬虫的问题,这里拿出来给大家分享下,一起学习。

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

二、解决过程

这里【PI】大佬提出了思路,的确可行。

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

【皮皮】给了一份代码,取巧,这里就不展示了。后来【月神】给了一份可行的代码,如下所示:

for url in all_url:
    resp = requests.get(url, headers=header, stream=True)
    content_length = resp.headers.get('content-length')
    if content_length and int(content_length) > 10240:
        print(url)

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

程序运行之后,不到1秒就出来结果了,没想到jupyter里边可以自动显示时间,以前也有看到,但是没有留意,Pycharm里边是没有的,这里来看,jupyter还是蛮香,Pycharm还得自己设置打印时间。

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

【月神】的方法完全满足题目要求,不过这个文件解析有点慢。

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

后来【德善堂小儿推拿-瑜亮老师】大佬摊牌了:题目就考这一个知识点:stream=True,别的都是简单的很。这里给出了代码:

import requests
import time

url = ['https://wap.game.xiaomi.com/index.php?c=app&v=download&package=com.joypac.dragonhero.cn.mi&channel=meng_4001_2_android',
       'https://wap.game.xiaomi.com/index.php?c=app&v=download&package=com.yiwan.longtengtianxia.mi&channel=meng_4001_2_android',
       'https://wap.game.xiaomi.com/index.php?c=app&v=download&package=com.netease.mrzh.mi&channel=meng_4001_2_android']
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

start = time.time()
# 方法一:判断response.headers里面的内容
for i in url:
    resp = requests.get(i, headers=header, stream=True)
    if 'Content-Length' in resp.headers:
        print(f'有效url有:\n {i}')
end = time.time()
print(f'测试完毕!共耗时: {end - start:.2f}秒')

# 方法二:判断响应的字节流大小
start2 = time.time()
for i in url:
    resp = requests.get(i, headers=header, stream=True)
    chunk_size = 1024
    for data in resp.iter_content(chunk_size=chunk_size):
        if len(data) > 800:
            print(f'有效url有:\n {i}')
        break
end2 = time.time()
print(f'测试完毕!共耗时: {end2 - start2:.2f}秒')

下面是代码截图: Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用 Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

那小伙伴们就问了,那个stream参数是干啥用的啊?不慌,【月神】丢来一个解析。

Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

如此就清晰多了。

三、总结

大家好,我是皮皮。这篇文章主要分享了在Python网络爬虫过程中,构建网络请求的时候,参数stream=True的使用,使用了一个具体的实例给大家演示了该参数的具体用法!关于该参数的介绍,请参考文中的解析。

最后感谢【德善堂小儿推拿-瑜亮老师】分享,感谢【皮皮】、【PI】、【月神】大佬给出的思路和代码支持,感谢粉丝【冫马讠成】、【孤独】等人参与学习交流。

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
1个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
Python进阶者 Python进阶者
7个月前
盘点一道Python中的yield生成器的题目
大家好,我是皮皮。 一、前言前几天在Python最强王者交流群有个叫【Chloe】的粉丝问了一个Python生成器的问题,这里拿出来给大家分享下,一起学习下。 二、解决过程这里【月神】给出了解答,如下图所示:当然了,这块有点难理解的部分,如下图所示:如果加return的话,效果就不一样了。这里在额外细节化一下,【瑜亮老师】给出了yield用法细节。这个题目主
Python进阶者 Python进阶者
7个月前
盘点一个Python网络爬虫过程中中文乱码的问题
大家好,我是皮皮。 一、前言前几天在Python黄金交流群有个叫【Mt.Everest】的粉丝问了一个关于Python网络爬虫过程中中文乱码的问题,这里拿出来给大家分享下,一起学习。 二、解决过程这个问题其实很早之前,我就写过相关文章,而且屡试不爽。 【Python进阶者】解答这里给出了两个思路,照着这个思路去的话,问题不大。事实上并不巧,还是翻车了。 【黑
Python进阶者 Python进阶者
2个月前
盘点一个Python中列表合并的问题
大家好,我是Python进阶者。一、前言前几天在Python钻石交流群【海南菜同学】问了一个Python列表合并的问题,提问截图如下:原始代码如下:def cppi():    list1  二、实现过程这里【瑜亮老师】给出了具体的思路,如果两个列表中元素个数相同,可以用zip,然后join,如下所示。最后给了一份代码如下所示:a顺利地解决了粉丝的问题。最后
Python进阶者 Python进阶者
5个月前
使用Python编程打造一款游戏
大家好,我是皮皮。一、前言前几天在Python最强王者交流群有个叫【Chloe】的粉丝问了一个Python小游戏的问题,这里拿出来给大家分享下,一起学习下。二、解决过程看上去代码有报错,截图如下。这个错误倒是很常见,因为数据类型不同,直接相加肯定报错,如果需要更改的话,那么需要转一下数据类型,这里【沈复】大佬给出了答案,如下图所示。当然了,粉丝的代码残缺的太
Python进阶者 Python进阶者
7个月前
Python网络爬虫中重新请求,请问有什么比较好的解决方法?
大家好,我是皮皮。 一、前言前几天在Python钻石群有个叫【某嘟】的粉丝问了一个关于Python网络爬虫中重新请求的问题,这里拿出来给大家分享下,一起学习。 二、解决过程这里【D I Y】大佬给了一个思路,确实可行。不过后来她自己又找到了一个更好的方法,找到一个HTTPAdapter可以实现超时重试,大概用法如下:from requests.adapter
Python进阶者 Python进阶者
8个月前
Python实现:与其穷举构造字典,不如直接用《百家姓》返回其index
大家好,我是我是皮皮。 一、前言前几天在Python最强王者交流群【小王】大佬分享了一个Python代码,关于百家姓的,按百家姓排名名字顺序。这个方法虽好,但是【德善堂小儿推拿瑜亮老师】大佬觉得与其穷举构造字典,不如直接用《百家姓》返回其index,在粉丝【mofyl】的请求下,完成了代码编写。 二、解决过程下面这个是针对单字姓的,百家姓是从网上直接复制的,
Python进阶者 Python进阶者
7个月前
盘点Pandas中csv文件读取的方法所带参数usecols知识
大家好,我是皮皮。 一、前言前几天在Python最强王者群有个叫【老松鼠】的粉丝问了一个关于Pandas中csv文件读取的方法所带参数usecols知识问题,这里拿出来给大家分享下,一起学习。其实usecols参数是指定列读取。 二、解决过程下面是【德善堂小儿推拿瑜亮老师】大佬解答:举个栗子,就像你手中只有常见的人民币面值,让你把面值等于5元,10元,100
Python进阶者 Python进阶者
4个月前
盘点一道字典转换基础题目
大家好,我是皮皮。 一、前言前几天在Python最强王者交流群有个叫【麦当】的粉丝问了一个Python基础问题,这里拿出来给大家分享下,一起学习下。 二、解决过程这个问题挺基础的,看上去确实也不难。这里【瑜亮老师】直接给了一个代码d 'a': 1, 'b': 2res list(tuple(d.items()))print(res)后来【月神】发现,其实
Python进阶者 Python进阶者
7个月前
Python中的and和or,结果让人出乎意料之外
大家好,我是皮皮。 一、前言前几天在Python最强王者交流群有个叫【Chloe】的粉丝问了一个Python基础的问题,关于and和or,这里拿出来给大家分享下,一起学习下。 二、解决过程这里【杰】给出了解答,其实Python中,除括号外,and优先级较高,那么这里的话【瑜亮老师】也给出了解答,确实没有括号,表达式从左往右运算,and比or优先级高,先算an