速学爬虫

爬虫前奏

 爬虫实例:

  1.搜索引擎(百度、谷歌、360搜索等)。

  2.伯乐在线。

  3.惠惠购物助手。

  4.数据分析与研究(数据冰山知乎专栏)。

  5.抢票软件等。

 什么是网络爬虫:

  1.通俗理解:爬虫是一个模拟人类请求网站行为的程序,可以自动请求网页、并将数据抓取下来,然后使用一定的规则提取有价值的数据。

  2.专业介绍:百度百科。

 通用爬虫和聚焦爬虫:

  1.通用爬虫:通用爬虫是搜索引擎抓取系统(百度、谷歌、搜狗等)的重要组成部分。主要是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。

  2.聚焦爬虫:是面向特定需求的一种网络爬虫程序,他与通用爬虫的区别在于:聚焦爬虫在实施网页抓取的时候会对内容进行筛选和处理,尽量保证只抓取与需求相关的网页信息。

 为什么用python写爬虫程序:

  1.PHP:PHP大多用于网页开发,对多线程、异步支持不是很好,并发处理能力弱。爬虫是工具性程序,对速度和效率要求比较高。

  2.Java:生态圈很完善,是python爬虫最大的竞争对手。但Java语言本身很笨重,代码量很大,重构成本比较高,任何修改会导致代码大量改动,而爬虫经常要修改采集代码。

  3.C/C++:运行效率是无敌的,但学习和开发成本高,写爬虫程序可能要很长时间。

  4.python:语法优美、海马简洁、开发效率高、支持的模块多。相关的HTTP请求模块和HTML解析模块非常丰富。还有Scrapy和Scrapy-redis框架让我们开发爬虫变得异常简单。

 准备工具:

  1.python3.6开发环境。

  2.pycharm 2017 professional版。

  3.虚拟环境“virtualenv/virtualenvwrapper”。

http协议和chrome抓包工具:

 什么是http和https协议:

  HTTP协议:全称是HyperText Transfer Protocal,中文意思是超文本传输协议,是一种发布和接受HTML页面的方法。服务器端口号是80端口。

  HTTPS协议:是HTTP协议的加密版本,在HTTP下加入了SSL层,服务器端口号是443端口。

 在浏览器中发送一个http请求的过程:

  1.当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求,HTTP请求主要分为“get”和“post”两种方法。

  2.当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个request请求去截获 http://www.baidu.com 的html文件,服务器把request文件对象发送回给浏览器。

  3.浏览器分析request中的html,发现其中引用了很多其他文件,比如lmages文件,css文件,js文件。浏览器会自动再次发送request去获取图片,css文件,或者js文件。

  4.当所有的文件都下载成功后,网页会根据HTML语法结构完整的显示出来。

 url详解:

  url是统一资源定位符。

  一个url由以下几部分组成:scheme://host:port/path/?query-string=xxx#anchor

  scheme:代表的是访问的协议,一般为http或者http以及ftp等。

  host:主机名、域名。

  port:端口号。访问网站时,浏览器默认使用80端口。

  path:查找路径。

  query-string:查询字符串。

  anchor:锚点,后台一般不用管,前端用来做页面定位。

  在浏览器中请求一个url,浏览器会对这个url进行一个编码,除英文字母、数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码。

 常用的请求方法:

  在http协议中,定义了8种请求方法。常用两种:get请求和post请求。

  get请求:请求指定的页面信息,并返回实体主体。只从服务器获取数据,并不会对服务器资源产生任何影响。

  post请求:向指定资源提交数据进行处理请求,数据包含在请求体中,POST请求可能会导致新的资源的建立或已有资源的修改。

 请求头常见参数:

  1.user-agent  2.referer  3.cookie

 常见响应状态码:

  1.200:请求正常,服务器正常的返回数据。

  2.301:永久重定向。

  3.302:临时重定向。

  4.400:请求的url在服务器上找不到。

  5.403:服务器拒绝访问,权限不够。

  6.500:服务区内部错误。

 chrome抓包工具:

  chrome浏览器是一个非常亲近开发者的浏览器。可以方便的查看网络请求以及发送的参数。

 Urllib库:

  最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保证服务器返回的数据。

 urlopen函数:

  在python3的urllib库中,所有和网络请求相关的方法,都被集到urllib.requset模块下面

from urllib import request
resp = request.urlopen('http://www.baidu.com')
print(resp.read())

  实际上,使用浏览器访问百度,右键查看源代码。

   1.url:请求的url。

   2.data:请求的data,如果设置了这个值,那么将变成post请求。

   3.返回值:返回值是一个http:client.HTTPResponse对象,这个对象是一个人类文件句柄对象。

    有read(size),readline、readlines以及getcode等方法。

 urlretrieve函数:

  这个函数可以方便的将网页上的一个文件保存到本地。以下代码可以非常方便的将百度的首页下载到本地:

from urllib import request
request.urlretrieve('http://www.baidu.com','baidu .html')

 urlencode函数:

  用浏览器发送请求的时候,如果url中包含了中文或者其他特殊字符,那么浏览器会自动的给我们进行编码。而如果使用代码发送请求,那么就必须手动进行编码,这时候就应该使用urlencode函数来实现。urlencode可以把字典数据转换为url编码的数据:

from urllib import request
data = {'name':'爬虫基础','greet':'hello world','age':100}
qs = parse.urlencode(data)
print(qs)

 parse_qs函数:

  可以将经过编码后的url参数进行编码:

from urllib import parse
qs = "name=%E7%88%AC%E8%99%AB%E5%9F%8A%E7%A1%80&greet=hello+world&age=100"
print(parse.parse_qs(qs))

 urlparse和urlsplit:

 

posted @ 2019-06-05 20:19  叫我耀耀  阅读(165)  评论(0编辑  收藏  举报