赞
踩
目录
如果我们把互联网比作一个巨大的网,那一台计算机上的数据就是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据。
解释1:通过一个程序进行爬取网页,获取有用信息
解释2:使用程序模拟浏览器,去向服务器发送请求,获取响应信息。
爬取网页:爬取整个网页,包含了网页中所有的内容
解析数据:将网页中你得到的数据进行解析
难点:爬虫与反爬虫之间的博弈
数据分析/人工数据集
社交软件冷启动
舆情监控
竞争对手监控
通用爬虫:
实例:百度、360、Google等搜索引擎
功能:访问网页,抓取数据,数据存储,数据处理,提供检索服务
Robots协议:一个约定俗称的协议,添加robots.txt文件,来说明本网站哪些内容不可以被抓取,起不到限制作用,自己写的爬虫无需遵守。
网站排名:
以前:根据pagerank算法值进行排名(参考网站流量,点击率等指标)
现在:百度竞价排名
缺点:抓取的数据大多是无用的;不能根据用户的需求精准的获取数据。
聚焦爬虫:
功能:根据需求,实现爬虫程序,抓取需要的数据
设计思路:确定要爬取的url;模拟浏览器通过http协议访问url,获取服务器返回的html代码;解析html字符串(根据一定的规则提取数据)
1.user_agent:中文名Wie用户代理,简称UA,他是一个特殊字符串头,是的服务器能够市北客户使用的操作系统及版本,CPU类型,浏览器及版本,浏览器渲染引擎,浏览器语言,浏览器插件等。
2.代理IP:(超出人类访问限制就会封IP)
(1)使用透明代理,对方服务器可以知道你使用了代理,并且也知道你的真实IP。
(2)使用匿名代理,对方服务器可以知道你使用了代理,但不知道你的真实IP。
(3)使用高匿名代理,对方服务器不知道你使用了代理,也不知道你的真实IP。
3.验证码访问
打码平台:云打码平台
4.动态加载网页:网站返回的是js数据,并不是网页真实数据;selenium驱动真实的浏览器发送请求。
5.数据加密
分析js代码
目标:使用urllib获取百度网站首页的源码
urllib不需要安装,python自带,可直接使用
- # 使用urllib获取百度首页的源码
- import urllib.request
'运行
- # 1.定义一个url(你要访问的网页地址)
- url = "http://www.baidu.com"
'运行
注意发送请求时要确保你的电脑是联网,不然就会报错
使用 urllib.request.urlopen() 方法发送请求
- # 2.模拟浏览器向服务器发送请求(联网)
- response = urllib.request.urlopen(url)
使用 read() 方法读取数据
这里注意要将获取的数据进行解码 decode(),否则无法解析网页中的中文。
- # 3.获取响应中的页面的源码
- # read()方法 返回的是字节形式的二进制数据
- # 将二进数数据转换为字符串
- # 二进制-->字符串 这个动作叫做解码 decode("编码的格式")
- # 网页的编码格式可以看网页源码中 head --> meta --> content 里的charset中有写明
- content = response.read().decode('utf-8')
- # 4.打印数据
- # 打印结果:b'<!DOCTYPE html><!--STATUS OK--><html><head><meta。。。
- print(content)
完整代码:
- # 使用urllib获取百度首页的源码
- import urllib.request
-
- # 1.定义一个url(你要访问的网页地址)
- url = "http://www.baidu.com"
-
- # 2.模拟浏览器向服务器发送请求(联网)
- response = urllib.request.urlopen(url)
-
- # 3.获取响应中的页面的源码
- # read()方法 返回的是字节形式的二进制数据
- # 将二进数数据转换为字符串
- # 二进制-->字符串 这个动作叫做解码 decode("编码的格式")
- # 网页的编码格式可以看网页源码中 head --> meta --> content 里的charset中有写明
- content = response.read().decode('utf-8')
-
-
- # 4.打印数据
- # 打印结果:b'<!DOCTYPE html><!--STATUS OK--><html><head><meta。。。
- print(content)
- # 1.定义一个url(你要访问的网页地址)
- url = "http://www.baidu.com"
-
- # 2.模拟浏览器向服务器发送请求(联网)
- response = urllib.request.urlopen(url)
服务器返回的响应是HTML格式
- # 3.获取响应中的页面的源码
- print(type(response)) # <class 'http.client.HTTPResponse'>
注意:以下读取的content都需要加 decode()进行解码,否则无法解析网页中的中文。
(1)read() 方法
- # 按照一个字节一个字节的去读整个网页的字节
- content = response.read()
- # 读五个字节
- content = response.read(5)
(2)读取一行
- # 读取一行
- content = response.readline()
(3)一行一行的读,读所有字节
- # 一行一行的读,读取所有字节
- content = response.readlines()
- print(content)
(4)返回状态码
- # 返回状态码 如果是200,则表示请求成功
- print(response.getcode())
(5)返回url地址
- # 返回 URL 地址
- print(response.geturl())
(6)返回状态信息
- # 获取的是一些状态信息
- print(response.getheaders())
完整代码:
- import urllib.request
-
-
- # 1.定义一个url(你要访问的网页地址)
- url = "http://www.baidu.com"
-
-
- # 2.模拟浏览器向服务器发送请求(联网)
- response = urllib.request.urlopen(url)
-
-
- # 3.获取响应中的页面的源码(获取到的都是二进制的,后面需要再decode())
- # 一个类型和六个方法:HTTPResponse read, readline, readlines, getcode, geturl, getheaders
- # print(type(response)) # <class 'http.client.HTTPResponse'>
-
- # 按照一个字节一个字节的去读整个网页的字节
- # content = response.read()
-
- # 读五个字节
- # content = response.read(5)
-
- # 读取一行
- # content = response.readline()
-
- # 一行一行的读,读取所有字节
- # content = response.readlines()
- # print(content)
-
- # 返回状态码 如果是200,则表示请求成功
- print(response.getcode())
-
- # 返回 URL 地址
- print(response.geturl())
-
- # 获取的是一些状态信息
- print(response.getheaders())
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。