1. 爬虫简介

2. requests 基础用法

3. urlretrieve()

1. 爬虫简介

爬虫的定义

网络爬虫(又被称为网页蜘蛛、网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本

爬虫有什么用

  • 市场分析:电商分析、商圈分析、一二级市场分析等
  • 市场监控:电商、新闻、房源监控等
  • 商机发现:招投标情报发现、客户资料发掘、企业客户发现等

认识网址的构成

一个网站的网址一般由域名 + 自己编写的页面所构成。我们在访问同一网站的网页时,域名一般是不会改变的,因此我们爬虫所需要解析的就是网站自己所编写的不同页面的入口 url,只有解析出来各个页面的入口,才能开始我们的爬虫。

了解网页的两种加载方法

只有同步加载的数据才能直接在网页源代码中直接查看到,异步加载的数据直接查看网页源代码是看不到的。

  • 同步加载:改变网址上的某些参数会导致网页发生改变,例如:www.itjuzi.com/company?page=1(改变 page= 后面的数字,网页会发生改变)。
  • 异步加载:改变网址上的参数不会使网页发生改变,例如:www.lagou.com/gongsi/(翻页后网址不会发生变化)。
    • 同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。
    • 异步任务:不进入主线程,而进入"任务队列"(task queue)的任务。有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行(如回调函数)。
验证网页是同步还是异步加载的方法:把 JavaScript 由“允许”改为“阻止”,重新刷新页面。若网页正常加载,说明该网页的加载方式是同步加载;若网页没有正常加载,说明该网页的加载方式是异步加载。

认识网页源码的构成

在网页中右键点击查看网页源码,可以查看到网页的源代码信息。
源代码一般由三个部分组成,分别是:
  • html:描述网页的内容结构
  • css:描述网页的样式排版布局
  • JavaScript:描述网页的事件处理,即鼠标或键盘在网页元素上的动作后的程序

查看网页请求

以 chrome 浏览器为例,在网页上点击鼠标右键,选择“检查”(或者直接 F12),选择“network”,刷新页面,选择 ALL 下面的第一个链接,这样就可以看到网页的各种请求信息。

请求头(Request Headers):

  • Accept: text/html,image/*  (浏览器可以接收的类型)
  • Accept-Charset: ISO-8859-1  (浏览器可以接收的编码类型)
  • Accept-Encoding: gzip,compress  (浏览器可以接收压缩编码类型)
  • Accept-Language: en-us,zh-cn  (浏览器可以接收的语言和国家类型)
  • Host: www.it315.org:80  (浏览器请求的主机和端口)
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  (某个页面缓存时间)
  • Referer: http://www.it315.org/index.jsp  (请求来自于哪个页面)
  • User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  (浏览器相关信息)
  • Cookie:  (浏览器暂存服务器发送的信息)
  • Connection: close(1.0)/Keep-Alive(1.1)  (HTTP请求的版本的特点)
  • Date: Tue, 11 Jul 2000 18:23:51 GMT  (请求网站的时间)

响应头(Response Headers):

  • Location: http://www.it315.org/index.jsp  (控制浏览器显示哪个页面)
  • Server: apache tomcat  (服务器的类型)
  • Content-Encoding: gzip  (服务器发送的压缩编码方式)
  • Content-Length: 80  (服务器发送显示的字节码长度)
  • Content-Language: zh-cn  (服务器发送内容的语言和国家名)
  • Content-Type: image/jpeg; charset=UTF-8  (服务器发送内容的类型和编码类型)
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  (服务器最后一次修改的时间)
  • Refresh: 1;url=http://www.it315.org  (控制浏览器1秒钟后转发URL所指向的页面)
  • Content-Disposition: attachment; filename=aaa.jpg  (服务器控制浏览器下载方式打开文件)
  • Transfer-Encoding: chunked  (服务器分块传递数据到客户端)
  • Set-Cookie: SS=Q0=5Lb_nQ; path=/search  (服务器发送Cookie相关的信息)
  • Expires: -1  (服务器控制浏览器不要缓存网页,默认是缓存)
  • Cache-Control: no-cache  (服务器控制浏览器不要缓存网页)
  • Pragma: no-cache  (服务器控制浏览器不要缓存网页)
  • Connection: close/Keep-Alive  (HTTP请求的版本的特点)
  • Date: Tue, 11 Jul 2000 18:23:51 GMT  (响应网站的时间)

通用的网络爬虫框架

  1. 挑选种子 URL;
  2. 将这些 URL 放入待抓取的 URL 队列;
  3. 取出待抓取的 URL,下载并存储进已下载网页库中。此外,将这些 URL 放入已抓取 URL 队列;
  4. 分析已抓取队列中的 URL,并且将 URL 放入待抓取 URL 队列,从而进入下一循环。

2. requests 基础用法

详解:requests 库

Requests 库的主要方法

requests.get 方法:

1 # 使用get方法发送请求,返回包含网页数据的Response并存储到Response对象r中
2 r = requests.get(url)
Response 对象的属性:
  • r.status_code:http 请求的返回状态,200 表示连接成功(HTTP 状态码)
  • r.text:返回对象的文本内容
  • r.content:猜测返回对象的二进制形式
  • r.encoding:分析返回对象的编码方式
  • r.apparent_encoding:响应内容编码方式(备选编码方式)

示例:分析豆瓣短评网页

1 import requests
2
3 url = ' https://book.douban.com/subject/27147922/?icn=index-editionrecommend'
4 r = requests.get(url, timeout=20) # 设置超时时间为20秒
5 # #print(r.text) # 打印返回文本
6 # 抛出异常
7 print(r.raise_for_status()) # None

3. urlretrieve()

用于直接将远程数据下载到本地。

urlretrieve(url, filename=None, reporthook=None, data=None)
  • filename:指定了保存本地路径(如果参数未指定,urllib 会生成一个临时文件保存数据)。
  • reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。 
  • data:指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。

示例 1:下载图片

使用 urlretrieve():

1 from urllib.request import urlretrieve
2
3 urlretrieve("http://pic1.win4000.com/pic/b/20/b42b4ca4c5_250_350.jpg", "e:\\1.jpg")

使用 requests:

1 import requests
2
3 url = "http://pic1.win4000.com/pic/b/20/b42b4ca4c5_250_350.jpg"
4 r = requests.get(url)
5 with open("e:\\1.jpg", "wb") as fp:
6 fp.write(r.content)

示例 2:下载文件并显示下载进度

 1 import os
2 from urllib.request import urlretrieve
3
4 def cbk(a, b, c):
5 '''回调函数
6 @a:已经下载的数据块
7 @b:数据块的大小
8 @c:远程文件的大小
9 '''
10 per = 100*a*b/c
11 if per > 100:
12 per = 100
13 print('%.2f%%' % per)
14
15 url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
16 dir = os.path.abspath('.')
17 work_path = os.path.join(dir, 'Python-2.7.5.tar.bz2')
18 urlretrieve(url, work_path, cbk)

执行效果:

爬虫简介、requests 基础用法、urlretrieve()的更多相关文章

  1. 【Python爬虫】selenium基础用法

    selenium 基础用法 阅读目录 初识selenium 基本使用 查找元素 元素互交操作 执行JavaScript 获取元素信息 等待 前进后退 Cookies 选项卡管理 异常处理 初识sele ...

  2. 爬虫3 requests基础之下载图片用content(二进制内容)

    res = requests.get('http://soso3.gtimg.cn/sosopic/0/11129365531347748413/640') # print(res.content) ...

  3. 爬虫3 requests基础之 乱码编码问题

    import requests res = requests.get('http://www.quanshuwang.com') res.encoding = 'gbk' print(res.text ...

  4. 爬虫3 requests基础2 代理 证书 重定向 响应时间

    import requests # 代理 # proxy = { # 'http':'http://182.61.29.114.6868' # } # res = requests.get('http ...

  5. 爬虫3 requests基础

    import requests # get实例 # res = requests.get('http://httpbin.org/get') # # res.encoding='utf-8' # pr ...

  6. 爬虫之requests 高级用法

    1. 文件上传 import requests files = {'file': open('favicon.ico', 'rb')} r = requests.post("http://h ...

  7. MongoDB简介---MongoDB基础用法(一)

    Mongo MongoDB是一个基于分布式文件存储的数据库.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB 将数据存储为一 ...

  8. 爬虫开发7.scrapy框架简介和基础应用

    scrapy框架简介和基础应用阅读量: 1432 scrapy 今日概要 scrapy框架介绍 环境安装 基础使用 今日详情 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数 ...

  9. Python爬虫十六式 - 第三式:Requests的用法

    Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽   Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...

随机推荐

  1. 最常用SQL joins:内连接(交集)、左外连接、右外连接、左连接、右连接、全连接(并集),全外连接

    1.内连接.两个表的公共部分用Inner join,Inner join是交集的部分. Select * from TableA A inner join TableB B on A.key=B.ke ...

  2. vue中将分号去掉,将双引号变为单引号的配置

    在项目根目录下创建.prettierrc文件,文件内容如下: { "semi": false, "singleQuote": true } 实现vs code中 ...

  3. POJ1852-换向思考

    蚂蚁碰撞后反向与穿越的时间一样. 穷竭搜索---->想象力 #include<stdio.h> int main(void){ int n,len,ansNum,mintime,ma ...

  4. 看完我的笔记不懂也会懂----MongoDB

    MongoDb数据库学习 - 数据库的分类 - 数据库基本概念 - MongoDB常用指令 - MongoDB的CURD - sort({key:*[1,-1]}).limit(num).skip(n ...

  5. Ch1-What is DAX?

    What is DAX? 数据分析表达式 (DAX) 是在 Analysis Services.Power BI 以及 Excel 中的 Power Pivot 使用的公式表达式语言.在第一版Powe ...

  6. 使用wireshark 抓取 http https tcp ip 协议进行学习

    使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...

  7. AtCoder Beginner Contest 190

    A Very Very Primitive Game int main() { int a, b, c; cin >> a >> b >> c; if(c == 0 ...

  8. WNN48T6X 54端口国产化万兆交换机

    WNN48T6X是基于盛科CTC5160设计的国产化三层万兆交换机,提供48路千兆电口和6路万兆光口,采用龙芯 2K1000处理器,支持双冗余可插拔电源供电.支持常规的L2/L3协议,支持Telnet ...

  9. kubernetes生产实践之mongodb

    简介 先看下生命周期图 kubedb支持的mongodb版本 [root@qd01-stop-k8s-master001 mysql]# kubectl get mongodbversions NAM ...

  10. 导出文件,responseType设置了blob,实际返回了JSON格式的错误信息的处理方式

    需求:导出文件 问题描述:由于后台直接返回的文件流,在请求下载的方法中将XHR 的 responseType 指定为 blob 或者 arraybuffer.但并不是每次的操作都是成功的,所以在接口错 ...