当前位置: 首页 > news >正文

Linux 抓取网页方式(curl+wget)

Linux抓取网页,简单方法是直接通过 curl 或 wget 两种命令。

curl 和 wget 命令,目前已经支持Linux和Windows平台,后续将介绍。



curl 和 wget支持协议

curl 支持 http,https,ftp,ftps,scp,telnet等网络协议,详见手册 man curl

wget支持 http,https,ftp网络协议,详见手册man wget


curl 和 wget下载安装

1、Ubuntu平台

wget 命令安装: sudo apt-get install wget (普通用户登录,需输入密码; root账户登录,无需输入密码)

curl 命令安装: sudo apt-get install curl (同 wget)

2、Windows平台

wget 下载地址:wget for Windows

curl 下载地址: curl Download

wget 和 curl 打包下载地址:Windows平台下的wget和curl工具包


Windows平台下,curl下载解压后,直接是curl.exe格式,拷贝到系统命令目录下C:\Windows\System32 即可

Windows平台下,wget下载解压后,是wget-1.11.4-1-setup.exe格式,需要安装;安装后,在环境变量 - 系统变量 - Path 中添加其安装目录即可



curl 和 wget抓取实例

抓取网页,主要有url 网址和proxy代理两种方式,下面以抓取“百度”首页为例,分别介绍


1、 url 网址方式抓取

(1)curl下载百度首页内容,保存在baidu_html文件中

curl http://www.baidu.com/-o baidu_html


(2)wget下载百度首页内容,保存在baidu_html文件中

wget http://www.baidu.com/-O baidu_html2


有的时候,由于网速/数据丢包/服务器宕机/等原因,导致暂时无法成功下载网页

这时,可能就需要多次尝试发送连接,请求服务器的响应;如果多次仍无响应,则可以确认服务器出问题了

(1)curl多次尝试连接

curl --retry 10 --retry-delay 60 --retry-max-time 60 http://www.baidu.com/ -o baidu_html

注: --retry表示重试次数; --retry-delay表示两次重试之间的时间间隔(秒为单位); --retry-max-time表示在此最大时间内只容许重试一次(一般与--retry-delay相同)


(2)wget多次尝试连接

wget -t 10 -w 60 -T 30 http://www.baidu.com/ -O baidu_html2

注:-t(--tries)表示重试次数; -w表示两次重试之间的时间间隔(秒为单位); -T表示连接超时时间,如果超时则连接不成功,继续尝试下一次连接


附:curl 判断服务器是否响应,还可以通过一段时间内下载获取的字节量来间接判断,命令格式如下:

curl -y 60 -Y 1 -m 60 http://www.baidu.com/ -o baidu_html

注:-y表示测试网速的时间; -Y表示-y这段时间下载的字节量(byte为单位); -m表示容许请求连接的最大时间,超过则连接自动断掉放弃连接



2、proxy代理方式抓取

proxy代理下载,是通过连接一台中间服务器间接下载url网页的过程,不是url直接连接网站服务器下载

两个著名的免费代理网站:

freeproxylists.net(全球数十个国家的免费代理,每日都更新)

xroxy.com(通过设置端口类型、代理类型、国家名称进行筛选)

在freeproxylists.net网站,选择一台中国的免费代理服务器为例,来介绍proxy代理抓取网页:

218.107.21.252:8080(ip为218.107.21.252;port为8080,中间以冒号“:”隔开,组成一个套接字)


(1)curl 通过代理抓取百度首页

curl -x 218.107.21.252:8080 -o aaaaa http://www.baidu.com(port 常见有80,8080,8086,8888,3128等,默认为80)

注:-x表示代理服务器(ip:port),即curl先连接到代理服务器218.107.21.252:8080,然后再通过218.107.21.252:8080下载百度首页,最后218.107.21.252:8080把下载的百度首页传给curl至本地(curl不是直接连接百度服务器下载首页的,而是通过一个中介代理来完成)


(2)wget通过代理抓取百度首页

wget通过代理下载,跟curl不太一样,需要首先设置代理服务器的http_proxy=ip:port

以ubuntu为例,在当前用户目录(cd ~),新建一个wget配置文件(.wgetrc),输入代理配置:

http_proxy=218.107.21.252:8080

然后再输入wget抓取网页的命令:

wget http://www.baidu.com -O baidu_html2


代理下载截图:



=======================

抓取的百度首页数据(截图):



其它命令参数用法,同url网址方式,在此不再赘述

ftp协议、迭代子目录等更多的curl 和 wget用法,可以man查看帮助手册



知识拓展:

在国内,由于某种原因一般难以直接访问国外某些敏感网站,需要通过 VPN 或 代理服务器才能访问

如果校园网和教育网有IPv6,则可以通过sixxs.org免费代理访问facebook、twitter、六维空间等网站


其实,除了VPN 和 IPv6+sixxs.org代理方式外,普通用户还是有其它途径访问到国外网站

下面介绍两个著名的免费代理网站:

freeproxylists.net(全球数十个国家的免费代理,每日都更新)

xroxy.com(通过设置端口类型、代理类型、国家名称进行筛选)


curl 项目实例

使用curl +freeproxylists.net免费代理,实现了全球12国家google play游戏排名的网页抓取以及趋势图查询(抓取网页模块全部使用Shell编写,核心代码约1000行)

游戏排名趋势图请见我先前的博客:JFreeChart项目实例



相关文章:

  • 案例_(单线程)使用正则的内涵段子爬虫
  • flash沙盘预测试性能
  • MYSQL 配置文件
  • 【iOS-Cocos2d游戏开发】cocos2d 坐标系使用
  • bzoj5281/luogu4377 Talent Show (01分数规划+背包dp)
  • 纳米时代与现代无穷小分析
  • arguments.callee的作用及替换方案
  • 【IOS】实现一种书本的展示特效
  • asp.net webform设计思路的思考
  • 给自己的应用添加iAd广告之一
  • virsh查看迁移信息的两个命令
  • 【iOS-Cocos2d游戏开发】触屏事件处理机制
  • 迷宫里的动态规划应用
  • Django学习手册 - cookie / session
  • We are unable to complete the review of your app since one or more of your In App Purchases have not
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • golang 发送GET和POST示例
  • Javascript编码规范
  • Java超时控制的实现
  • Js基础知识(四) - js运行原理与机制
  • PHP的Ev教程三(Periodic watcher)
  • React组件设计模式(一)
  • redis学习笔记(三):列表、集合、有序集合
  • Shell编程
  • Spring Boot快速入门(一):Hello Spring Boot
  • Spring框架之我见(三)——IOC、AOP
  • TCP拥塞控制
  • Terraform入门 - 1. 安装Terraform
  • Twitter赢在开放,三年创造奇迹
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 三栏布局总结
  • 王永庆:技术创新改变教育未来
  • 正则学习笔记
  • 从如何停掉 Promise 链说起
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (12)Hive调优——count distinct去重优化
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (27)4.8 习题课
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (理论篇)httpmoudle和httphandler一览
  • (转)Windows2003安全设置/维护
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .a文件和.so文件
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net Stream篇(六)
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 的字符串暂存池
  • .NET企业级应用架构设计系列之应用服务器
  • @ModelAttribute 注解
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用