Cminglyer 发表于 2020-5-26 22:09:11

爬虫 爬取网页 加载网页时间长

学习完小甲鱼爬虫课程后,自己尝试写爬虫代码,会遇到这样的问题: urlopen 某些网站, 程序跑起来,不报错也不结束,一只等待程序在跑。网络高峰时很难跑出结果。

我仅仅是要爬取网页“审查元素” 里的代码信息,不需要网页完全加载完相关图片、动画等。

有没有这样的方案,可以不等待网页完全加载完? 仅仅是爬取源代码信息。

wp231957 发表于 2020-5-27 07:14:02

无头浏览器吗
我们提交的是get或post请求,和网页加载有毛关系

Twilight6 发表于 2020-5-27 23:20:01

没办法吧,审查元素就是返回的网页数据汇总吧?

Stubborn 发表于 2020-5-27 23:56:44

我们用代码请求的下来的,全部属于源代码信息,即请求下来的,就是右键,查看源码里面所有的字节。

比如请求一个图片的地址,返回的全部是二进制码信息。

你如果嫌弃速度慢,可以使用异步,或者线程的方式,等待有结果了在去处理,而不是等着出结果。

suchocolate 发表于 2020-5-28 08:10:41

发起urlopen的时候就是只拿到html,js,css等的txt,并不会像浏览器一样解析、加载、渲染。
当然,网速慢也可能导致html都拿不到,可以设置timeout参数:urlopen(url, timeout=5)。

Cminglyer 发表于 2020-5-30 09:38:22

自己回答自己,经过几天摸索和百度,大致说下理解:原来我一套代码写下来,没有考虑超时,以及异常的情况,其实很多时候不是代码问题,而是链接网络问题,程序在跑,不报错也不停止的“”假死“情况”。
这种情况,应该在代码里加上 timeout ,   while 循环 和try 语句,实现“如果超时没反应,while 重试多次”, 把尝试次数提上去之后,明显整个程序跑起来就顺了。

比如,代码节选:

    a=1
    while a<21:
      try:
            response = urllib.request.urlopen(req,timeout=12)
            html = response.read().decode("utf-8")
      except:
            print("第%d次 链接XX页面失败,重新连接。。。"% a)
            a = a +1
            continue
      else:
            print("链接XX页面成功!")
            break
页: [1]
查看完整版本: 爬虫 爬取网页 加载网页时间长