page contents

很全面的Python爬虫知识点总结(上)

一、网络爬虫概述 定义 网络蜘蛛、网络机器人,抓取网络数据的程序。 其实就是用Python程序模仿人点击浏览器并访问网站,而且模仿的越逼真越好。 爬取数据目的 获取大量数据,用来做数据...

一、网络爬虫概述

定义

网络蜘蛛、网络机器人,抓取网络数据的程序。

其实就是用Python程序模仿人点击浏览器并访问网站,而且模仿的越逼真越好。


爬取数据目的

获取大量数据,用来做数据分析

公司项目的测试数据,公司业务所需数据


企业获取数据方式

1、公司自有数据

2、第三方数据平台购买(数据堂、贵阳大数据交易所)

3、爬虫爬取数据 : 第三方平台上没有,或者价格太高


Python做爬虫优势

1、Python :请求模块、解析模块丰富成熟,强大的Scrapy网络爬虫框架

2、PHP :对多线程、异步支持不太好

3、JAVA:代码笨重,代码量大

4、C/C++:虽然效率高,但是代码成型慢


爬虫分类

1、# 通用网络爬虫(搜索引擎使用,遵守robots协议)

robots协议 :网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,

通用网络爬虫需要遵守robots协议(君子协议)

https://www.taobao.com/robots.txt

2、# 聚焦网络爬虫 :自己写的爬虫程序


爬虫爬取数据步骤

1、确定需要爬取的URL地址

2、由请求模块向URL地址发出请求,并得到网站的响应

3、从响应内容中提取所需数据

1、所需数据,保存

2、页面中有其他需要继续跟进的URL地址,继续第2步去发请求,如此循环


二、爬虫请求模块

模块名及导入urllib.request

1、模块名:urllib.request

2、导入方式:

   1、import urllib.request
   2、from urllib import request

3.使用方法:

	 req = request.Request(url,headers=headers)
	 res = request.urlopen(req)
     html = res.read().decode('utf-8')


常用方法详解

urllib.request.urlopen()方法

作用

向网站发起请求并获取响应对象


参数

1、URL:需要爬取的URL地址

2、timeout: 设置等待超时时间,指定时间内未得到响应抛出超时异常


响应对象(response)方法

1、bytes = response.read()

2、string = response.read().decode('utf-8')

3、url = response.geturl() # 返回实际数据的URL地址

4、code = response.getcode() # HTTP响应码

# 补充

5、string.encode() # string -> bytes

6、bytes.decode() # bytes -> string


urllib.request.Request()

作用

创建请求对象(包装请求,重构User-Agent,使程序更像正常人类请求)


参数

1、URL:请求的URL地址

2、headers:添加请求头(爬虫和反爬虫斗争的第一步)


使用流程

1、构造请求对象(重构User-Agent)

req = urllib.request.Request(url=url,headers={'User-Agent':'Mozilla/5.0 xxxx'})

2、发请求获取响应对象(urlopen)

res = urllib.request.urlopen(req)

3、获取响应对象内容

html = res.read().decode('utf-8')

示例:向测试网站发起请求,构造请求头并从响应中确认请求头信息

headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'}


三、URL地址编码模块

模块名

urllib.parse


作用

给URL地址中查询参数进行编码

编码前:百度安全验证
编码后:百度安全验证


常用方法

1、urlencode({dict})

   urlencode({'wd':'美女','pn':'20'})
   #编码后 :'wd=%E8%D5XXX&pn=20'

2、quote(string)

   quote('织女')
   #编码后 :'%D3%F5XXX'
unquote('%D3%F5XXX')
	#解码后:织女

使用方法:

from urllib import parse
#-----------urlencode({dict})编码-----------------
query_string = {'wd' : '美女'}
result = parse.urlencode(query_string)
# result: 'wd=%e7%be%8e%e5%a5%b3'
#----------quote(string)编码------------------
string = '美女'
print(parse.quote(string))
# 结果: %E7%BE%8E%E5%A5%B3
#----------unquote(string)解码----------------
string = '%E7%BE%8E%E5%A5%B3'
result = parse.unquote(string)
print(result)


拼接URL地址的3种方式

1、字符串相加

  '百度安全验证 + urlencode({'wd':'美女','pn':'50'})

2、字符串格式化(占位符)

  '百度安全验证' % urlencode({'wd':'美女','pn':'50'})

3、format()方法

   '百度安全验证}'.format(urlencode({'wd':'美女','pn':'50'}))


总结

1、urllib.request

   urllib.request.Request(url=url,headers=headers)
   urllib.request.urlopen(req)

2、urllib.parse

   urllib.parse.urlencode({'wd':'美女'})
   urllib.parse.quote('美女')
  • 发表于 2020-01-07 11:39
  • 阅读 ( 605 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章