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. SpringBoot源码解析

    1.@SpringBootApplication springboot采用注解方式开发的,当创建了一个springboot项目时,在启动类上会有一个注解@SpringBootApplication,这 ...

  2. ERROR 1040 (HY000) Too many connections

    C:\Users\Jilil>mysql -u root -pEnter password: *************ERROR 1040 (HY000): Too many connecti ...

  3. hive中更改表impala中不能生效

    hive中的更新或者新建表impala 不能实时更新 Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的meta ...

  4. 后端程序员之路 1、linux、centos

    CentOS.Ubuntu.Debian三个linux比较异同 - 记事本 - 博客频道 - CSDN.NEThttp://blog.csdn.net/educast/article/details/ ...

  5. SQL Database for Modern Developers

    好书分享,面向开发者的Azure SQL Database最佳实践,也适用SQL Server 2016以上的版本.应对不同场景使用的数据库功能,包括内存表,列存储表,非聚集列存储索引,JSON等等. ...

  6. 13. Vue CLI脚手架

    一. Vue CLI 介绍 1. 什么是Vue CLI? Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.Vue CLI 致力于将 Vue 生态中的工具基础标准化.它确保了各种构建工 ...

  7. Linux速通 随笔整理

    Linux速通 随笔整理 为了方便阅读,特整理了相关的学习笔记 零.大纲 一.系统安装 二.命令格式 三.文件管理 四.用户群组 五.文件处理 六.系统初始化及监控 七.硬盘初始化 八.网络原理

  8. Github Fork与远程主分支同步

    fork与主分支同步(5步) 1. git remote add upstream git@github.com:haichong98/gistandard.git   新建一个upstream的远程 ...

  9. python3中post和get请求处理

    post 请求处理 def url(): url = "www.xxx.com.cn" data = { "csrfmiddlewaretoken":" ...

  10. 一个mac软件合集的网站

    https://github.com/jaywcjlove/awesome-mac/blob/master/README-zh.md