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

点击上方“Python共享之家”,进行关注

回复“资源”即可获赠Python学习资料

海内存知己,天涯若比邻。

大家好,我是皮皮。

一、前言

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

c7f3872345644497a2604d137e231e1f.png

二、解决过程

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

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

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)
24cc6f4195b99533ebb6a9ae8e9a66e4.png

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

5bb45a6b43765794a1b72c82ad86bb7a.png

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

7f2ba542cc5f63c6657bcc00ad200eab.png

后来【德善堂小儿推拿-瑜亮老师】大佬摊牌了:题目就考这一个知识点: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}秒')

下面是代码截图:

89d499d7b40f13ca6ae9d91b4293b35c.png

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

4aef125d17f723ee4829fcb0403e9c22.png

如此就清晰多了。

三、总结

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

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python,有多种反爬虫技术的代码可以使用。其一种常见的方法是使用请求头(User-Agent)伪装成浏览器发送请求,以避免被服务器检测为爬虫。例如,可以使用`requests`库发送请求时设置`headers`参数来模拟浏览器请求头。 ```python import requests url = "http://example.com" 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.3" } response = requests.get(url, headers=headers) ``` 另一种常见的反爬虫技术是验证码。可以使用Python的第三方库,如`tesseract`或`pytesseract`,来处理验证码。这些库可以帮助你识别并自动输入验证码,以绕过验证码的阻碍。 ```python import requests from PIL import Image import pytesseract url = "http://example.com/captcha.jpg" # 下载验证码图片 response = requests.get(url, stream=True) with open("captcha.jpg", "wb") as f: for chunk in response.iter_content(chunk_size=128): f.write(chunk) # 使用tesseract识别验证码 image = Image.open("captcha.jpg") captcha = pytesseract.image_to_string(image) # 发送带验证码的请求 data = { "captcha": captcha, # 其他请求参数 } response = requests.post(url, data=data) ``` 除了上述方法外,还可以使用IP代理池来轮流使用不同的IP地址发送请求,以避免被服务器限制。可以使用第三方库,如`requests-ProxyPool`或`proxypool`来实现。此外,还可以使用动态IP服务提供商提供的API来获取动态IP地址。 总的来说,Python爬虫技术代码主要包括请求头伪装、验证码处理和IP代理等方法。根据具体的反爬虫策略和目标网站的防护措施,可以选择适合的代码实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python爬虫——反爬](https://blog.csdn.net/weixin_30906425/article/details/94801488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python爬虫基本反爬](https://blog.csdn.net/weixin_73513579/article/details/128469988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值