纯golang爬虫实战(三)

网站上有9000多张照片要下载:

//一开始参考https://www.jb51.net/article/153275.htm用reader和writer进行io.Copy,但经常是抓取100多个网页后就崩溃了,
//原因似乎是输入输出流影响或并发数量影响,代码执行快,输出流写硬盘慢。
//后来参考https://www.cnblogs.com/smartrui/p/12110576.html,改为ioutil.WriteFile直接写文件,还不行
//因为一共才9000多张照片,原来的程序每次下载前400张就崩溃了,应该是并发访问太多,网站受不了。
//于是狠心在主程序中每300个协程时延时2秒,终于成功下载完毕。但总感觉不那么优雅。代码如下:
package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "sync"
    "time"
)

var wg sync.WaitGroup

//保存图片
func savepic(id int) {
    defer wg.Add(-1)
    idstr := fmt.Sprintf("%08d", id)
    url := "http://192.168.13.1:8080/temp/Usr" + idstr + ".tmp"
    resp, err := http.Get(url)
    defer resp.Body.Close()
    if err != nil {
        fmt.Println(err)
    }
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
    }
    _ = ioutil.WriteFile("pic/"+idstr+".jpg", body, 0755)

}

func main() {
    for id := 2; id < 9202; id++ {
        wg.Add(1)
        go savepic(id)
        if (id % 300) == 0 {
            time.Sleep(time.Duration(2000) * time.Millisecond)
        }
    }
    wg.Wait()
}

原文地址:https://www.cnblogs.com/pu369/p/12230828.html

时间: 2024-10-13 11:41:09

纯golang爬虫实战(三)的相关文章

纯golang爬虫实战(二)

接上一篇文章https://www.cnblogs.com/pu369/p/12202845.html只讲了原理,抽时间写个了实用版,将员工信息爬取到一个TXT文档中,以便于查询,上代码: //纯golang爬虫 package main import ( "bytes" "fmt" "io/ioutil" "net/http" "net/http/cookiejar" "regexp"

纯golang爬虫实战-(五-小结篇)

对前几篇文章的代码进行梳理,形成4个通用型函数: 1 直接Get或Post,通常会被网站限制访问: 2 带headers进行Get或Post,模拟了浏览器,通常可以正常访问. 代码(注意由于下面的代码中设置http header时有*/*,造成代码的显示不太正常,但不影响): //Header是直接从chrome console中复制的view source形式的Request Headers,注意只包括以冒号分割的内容. //FormData也是直接从chrome console中复制的vie

纯golang爬虫实战-(七)-使用mime/multipart传输附件

还是先用Fiddler(设置过滤器.自动断点.捕获通信),截获以下内容: POST http://192.168.132.80/docs/docs/UploadDoc.jsp HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Referer: http://192.168.132.80/docs/docs/DocAdd.jsp?mainid=15&subid=49&secid=48&showsubmit=1&cow

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

Python爬虫实战二之爬取百度贴吧帖子

大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不好使,八成是正则表达式那儿匹配不到了,请更改一下正则,当然最主要的还是帮助大家理解思路. 2016/12/2 本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:ht

python爬虫实战——5分钟做个图片自动下载器

python爬虫实战--图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要,不要告诉我你老师没教你) 分析网页源代码,配合F12(没有F12那么乱的网页源代码,你想看死我?) 编写正则表达式或者XPath表达式(就是前面说的那个神器) 正式编写python爬虫代码 效果 运行: 恩,让我输入关键词,让我想想,输入什么好呢?好像有点暴露爱好了. 回车 好像开始下载了!好赞!,我看

Java爬虫实战(二):抓取一个视频网站上2015年所有电影的下载链接

前言:这是Java爬虫实战的第二篇文章,在第一篇文章仅仅只是抓取目标网站的链接的基础上,进一步提高难度,抓取目标页面上我们所需要的内容并保存在数据库中.这里的测试案例选用了一个我常用的电影下载网站(http://www.80s.la/).本来是想抓取网站上的所有电影的下载链接,后来感觉需要的时间太长,因此改成了抓取2015年电影的下载链接. 注:文末有我抓取到的整个列表的下载链接(包括:电影名称和迅雷下载链接) 一 原理简介 其实原理都跟第一篇文章差不多,不同的是鉴于这个网站的分类列表实在太多,

Python爬虫实战---抓取图书馆借阅信息

原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约,影响日后借书,而自己又懒得总是登录到学校图书馆借阅系统查看,于是就打算写一个爬虫来抓取自己的借阅信息,把每本书的应还日期给爬下来,并写入txt文件,这样每次忘了就可以打开该txt文件查看,每次借阅信息改变了,只要再重新运行一遍该程序,原txt文件就会被新文件覆盖,里面的内容得到更新. 用到的技术: Python版本是 2.7 ,同时用到了ur

爬虫实战:爬虫之 web 自动化终极杀手 ( 上)

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:陈象 导语: 最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路.本次爬虫内容有:静态页面的爬取.动态页面的爬取.web自动化终极爬虫. 分析: 数据获取(主要靠爬虫) 静态网页爬取 动态网页爬取 数据存储(python excel存储) Python Excel操作,保存结果 数据获取实战: 百度音乐(静态网页) 分析步骤1 . 打开百度音乐:http://music.baidu.com/