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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,余额还是小数

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值