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并发下载相关推荐

  1. python 并发下载器

    目标:使用协程实现网络图片下载 思路: 1.根据url地址请求网络资源 2.在本地创建文件准备保存 3.读取网络资源数据 4.把读取的网络资源写入到本地文件中 5.做异常捕获 代码: 单线程下载: i ...

  2. python编写下载器可暂停_python 并发下载器实现方法示例

    本文实例讲述了python 并发下载器实现方法.分享给大家供大家参考,具体如下: 并发下载器 并发下载原理 from gevent import monkey import gevent import ...

  3. Python 协程并发下载斗鱼美女图片

    仅用学习参考,转载请注明出处 爬虫技术第一步 作为爬虫技术第一步,就是可以使用爬取下载图片作为示例. 那么爬取图片,我们肯定去爬取美女图片作为第一步操作示例呀. 那么下面一个最重要的工作. 什么是最重 ...

  4. 如何下载python软件-python如何下载

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python的语法结构很简单,或者说书本里面的东西很容易掌握. 但是你要把pyth ...

  5. Python 并发编程之使用多线程和多处理器

    在Python编码中我们经常讨论的一个方面就是如何优化模拟执行的性能.尽管在考虑量化代码时NumPy.SciPy和pandas在这方面已然非常有用,但在构建事件驱动系统时我们无法有效地使用这些工具.有 ...

  6. Python Gevent – 高性能的 Python 并发框架

    From:http://www.xuebuyuan.com/1604603.html Gevent 指南(英文):http://sdiehl.github.io/gevent-tutorial Gev ...

  7. Python并发编程Asyncio

    目录 1. Asyncio是什么? (1)Sync与Async (2)Asyncio 工作原理 (3)Asyncio 用法 2. Asyncio是银弹吗? 3.多线程还是 Asyncio? 4.小结 ...

  8. python并发编程之semaphore(信号量)_python 之 并发编程(守护进程、互斥锁、IPC通信机制)...

    9.5 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就立即终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic process ...

  9. 如何使用Python批量下载图片

    爬虫程序在采集网页的过程中,需要从网上下载一些图片,比如表情包.壁纸.素材等,如果图片的数量很多,这样做就会非常麻烦和耗时.那么有没有更方便快捷的方法呢?答案是肯定的.我们可以利用Python编程语言 ...

最新文章

  1. pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列
  2. 极光大数据:00后王者大军来袭 荣耀手机偏偏独得恩宠
  3. 一步步完成jsRender + Spring MVC + Nginx前后端分离示例
  4. 在大数据时代,每家公司都要有大数据部门吗?
  5. 多么痛的领悟--写在领英股票被腰斩之后
  6. mysql的cpu高定位
  7. 浅谈RSocket与响应式编程
  8. C++常用概念——while循环时终止输入(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))
  9. linux更新软件载入缓存后停止_linux 中缓存怎样清除
  10. md5碰撞Java_什么是导致MD5碰撞的最短字符串?
  11. Oracle读书笔记
  12. 计算机网络基石 —— 集线器
  13. 正确率、召回率和F值
  14. 自学考试应该怎样答题才能更高分?
  15. Rigify:关于Rigify生成最终绑定时失败的原因及解决办法
  16. 使用Beep()函数发出指定音高 (一)
  17. 【leetcode】解数独
  18. 路由器经常出现断线现象解决对策在哪
  19. 【问题解决】springboot启动后一小会就自动停止,提示Process finished with exit code 0
  20. Python地学分析 — 建立矢量数据缓冲区 06

热门文章

  1. idea集成tomcat 控制台输出中文乱码问题解决合集
  2. 呕心沥血之作--手把手教你面试
  3. 思特奇_产品经理-运营岗_初面
  4. 如何快速给视频添加水印?
  5. 判断一个数是否为奇数
  6. Android开发之十四: camera(一):camera模组CMM介绍
  7. 请转载网站删除本人的文章
  8. windos+mysql+5.7_Windows下Mysql5.7安装使用
  9. 从Java架构体系到BATJ面试总结,看他是怎样用1年走完别人5年的路
  10. 办理3A等级信用证书有什么好处