⑴ 如何使用python爬虫时增加延时和重试.比如一旦出现500错误,就等待1分钟再重试
def main():
try:
代码(打开网址的代码)
except Exception as e:
time模块延时(自己查一下,我忘了)
main()
⑵ 如何设置python爬虫的爬取时间
由于项目需求收集并使用过一些爬虫相关库,做过一些对比分析。以下是我接触过的一些库:
Beautiful Soup。名气大,整合了一些常用爬虫需求。缺点:不能加载JS。
Scrapy。看起来很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。
Python基础教程
mechanize。优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
selenium。这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
cola。一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高,不过值得借鉴。
以下是我的一些实践经验:
对于简单的需求,比如有固定pattern的信息,怎么搞都是可以的。
对于较为复杂的需求,比如爬取动态页面、涉及状态转换、涉及反爬虫机制、涉及高并发,这种情况下是很难找到一个契合需求的库的,很多东西只能自己写。
至于题主提到的:
还有,采用现有的Python爬虫框架,相比与直接使用内置库,优势在哪?因为Python本身写爬虫已经很简单了。
third party library可以做到built-in library做不到或者做起来很困难的事情,仅此而已。还有就是,爬虫简不简单,完全取决于需求,跟Python是没什么关系的。
⑶ 如何优化 Python 爬虫的速度
1.使用开源的爬虫库scrapy,原生支持多线程,还可以设定抓取速率,并发线程数等等参数;除此之外,scrapy对爬虫提取HTML内容也有良好的支持。
2.优化方法有,开启gzip,多线程,对于定向采集可以用正则取代xpath,用pycurl代替urlib。
⑷ Python爬虫,有没有什么方法能让一次请求时间超长后跳过
在body里面设置一个timeout。然后再包一层try except补获异常。跳过异常继续执行代码,这样应该可以达到目的
⑸ Python爬虫异常和超时问题怎么处理
调用test函数超时监控,使用sleep模拟函数执行超时 2、引入signal模块,设置handler捕
⑹ python 爬虫如何设置爬取一定时间停止
fromtimeimportsleep
n=0
whilen<=100:
print(n)#动作
sleep(60)#暂停60秒
n=n+1
⑺ Python爬虫如何避免爬取网站访问过于频繁
一. 关于爬虫
爬虫,是一种按照一定的规则自动地抓取互联网信息的程序。本质是利用程序获取对我们有利的数据。
反爬虫,从不是将爬虫完全杜绝;而是想办法将爬虫的访问量限制在一个可接纳的范围,不要让它过于频繁。
二. 提高爬虫效率的方法
协程。采用协程,让多个爬虫一起工作,可以大幅度提高效率。
多进程。使用CPU的多个核,使用几个核就能提高几倍。
多线程。将任务分成多个,并发(交替)的执行。
分布式爬虫。让多个设备去跑同一个项目,效率也能大幅提升。
打包技术。可以将python文件打包成可执行的exe文件,让其在后台执行即可。
其他。比如,使用网速好的网络等等。
三. 反爬虫的措施
限制请求头,即request header。解决方法:我们可以填写user-agent声明自己的身份,有时还要去填写origin和referer声明请求的来源。
限制登录,即不登录就不能访问。解决方法:我们可以使用cookies和session的知识去模拟登录。
复杂的交互,比如设置“验证码”来阻拦登录。这就比较难做,解决方法1:我们用Selenium去手动输入验证码;方法2:我们用一些图像处理的库自动识别验证码(tesserocr/pytesserart/pillow)。
ip限制。如果这个IP地址,爬取网站频次太高,那么服务器就会暂时封掉来自这个IP地址的请求。 解决方法:使用time.sleep()来对爬虫的速度进行限制,建立IP代理池或者使用IPIDEA避免IP被封禁。
⑻ 如何实时获取网站最新消息,python爬虫,在获取时时间延迟高吗
可以自己买个VPS挂爬虫每隔一定时间获取,是个思路
⑼ python爬虫遇到有等待响应的网站怎么爬取
设置一个
import time
略…
# 做个睡眠时间
t = time.sleep(要睡眠的时间,如05,1,2,)
# 在想写入文件做个判断
with open("文件路径","wb")as f:
f.write(网址,conten)
if == t:
break