python并发下载
python并发下载
多线程爬虫
多线程爬虫请求内容速度过快,可能会造成服务器过载,或者是IP地址被封禁。为了避免出现这种情况,我们需要给爬虫设置一个delay延迟标识,设定请求同一个域名的时候的最小时间间隔。
同一时刻每个CPU只会执行一个进程,然后会在不同的进程之间快速切换,这样会给多个程序同时运行的错觉。同样地,在一个进程之中,程序的执行也是在不同线程之间进行切换的,每个线程执行程序的不同部分。当一个线程等待网页下载时,进程可以切换到其他线程继续执行,避免CPU时间的浪费。
在Python中可以使用内置的threading库实现多线程并发的效果。当有URL可以爬取数据的时候,循环创建线程,直到达到线程池的最大值。当第一个线程完成下载时,待爬取队列为空,线程就会退出。把爬虫队列转移到MongoDB当中,不同服务器上的爬虫也能够协同处理同一个爬虫任务。
动态内容
对动态网页进行逆向工程,使用webkit与网站交互,使用webkit库pyqt我们可以自定义浏览器渲染引擎,这样就可以完全控制想要执行的行为。如果不需要这么高的灵活性,那么还可以使用Selenium可以选择,提供了使浏览器自动化的API接口。使用pip install selenium
安装。
# 创建一个浏览器的连接
from selenium import webdriver
driver = webdriver.Chrome()
# 执行每条命令时,都可以通过浏览器接口来检查selenium是否按照预期执行,只能使用系统中已安装浏览器
# 在选定的浏览器中加载网页,使用get方法
driver.get('http://www.baidu.com')
# 设置需要选取的元素
driver.find_element_by_id('xxx').send_keys('xx')
# 可以使用js语句直接设置选项框的内容
js = "document.getElementById('page_size').options[1].text='1000'"
driver.execute_script(js)
# 单击搜索按钮执行搜索
driver.find_element_by_id('search').click()
# 通过implicitly_wait()方法设置超时30秒,如果查找的元素没有出现,selenium最多等待30秒
driver.implicitly_wait(30)
# 调用close方法关闭浏览器
driver.close()
python并发下载相关推荐
- python 并发下载器
目标:使用协程实现网络图片下载 思路: 1.根据url地址请求网络资源 2.在本地创建文件准备保存 3.读取网络资源数据 4.把读取的网络资源写入到本地文件中 5.做异常捕获 代码: 单线程下载: i ...
- python编写下载器可暂停_python 并发下载器实现方法示例
本文实例讲述了python 并发下载器实现方法.分享给大家供大家参考,具体如下: 并发下载器 并发下载原理 from gevent import monkey import gevent import ...
- Python 协程并发下载斗鱼美女图片
仅用学习参考,转载请注明出处 爬虫技术第一步 作为爬虫技术第一步,就是可以使用爬取下载图片作为示例. 那么爬取图片,我们肯定去爬取美女图片作为第一步操作示例呀. 那么下面一个最重要的工作. 什么是最重 ...
- 如何下载python软件-python如何下载
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python的语法结构很简单,或者说书本里面的东西很容易掌握. 但是你要把pyth ...
- Python 并发编程之使用多线程和多处理器
在Python编码中我们经常讨论的一个方面就是如何优化模拟执行的性能.尽管在考虑量化代码时NumPy.SciPy和pandas在这方面已然非常有用,但在构建事件驱动系统时我们无法有效地使用这些工具.有 ...
- Python Gevent – 高性能的 Python 并发框架
From:http://www.xuebuyuan.com/1604603.html Gevent 指南(英文):http://sdiehl.github.io/gevent-tutorial Gev ...
- Python并发编程Asyncio
目录 1. Asyncio是什么? (1)Sync与Async (2)Asyncio 工作原理 (3)Asyncio 用法 2. Asyncio是银弹吗? 3.多线程还是 Asyncio? 4.小结 ...
- python并发编程之semaphore(信号量)_python 之 并发编程(守护进程、互斥锁、IPC通信机制)...
9.5 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就立即终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic process ...
- 如何使用Python批量下载图片
爬虫程序在采集网页的过程中,需要从网上下载一些图片,比如表情包.壁纸.素材等,如果图片的数量很多,这样做就会非常麻烦和耗时.那么有没有更方便快捷的方法呢?答案是肯定的.我们可以利用Python编程语言 ...
最新文章
- pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列
- 极光大数据:00后王者大军来袭 荣耀手机偏偏独得恩宠
- 一步步完成jsRender + Spring MVC + Nginx前后端分离示例
- 在大数据时代,每家公司都要有大数据部门吗?
- 多么痛的领悟--写在领英股票被腰斩之后
- mysql的cpu高定位
- 浅谈RSocket与响应式编程
- C++常用概念——while循环时终止输入(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))
- linux更新软件载入缓存后停止_linux 中缓存怎样清除
- md5碰撞Java_什么是导致MD5碰撞的最短字符串?
- Oracle读书笔记
- 计算机网络基石 —— 集线器
- 正确率、召回率和F值
- 自学考试应该怎样答题才能更高分?
- Rigify:关于Rigify生成最终绑定时失败的原因及解决办法
- 使用Beep()函数发出指定音高 (一)
- 【leetcode】解数独
- 路由器经常出现断线现象解决对策在哪
- 【问题解决】springboot启动后一小会就自动停止,提示Process finished with exit code 0
- Python地学分析 — 建立矢量数据缓冲区 06