Python爬虫入门

爬虫的合法性

合法的爬虫

公开的数据,没有标识不可爬取

不影响别人服务器

不影响的业务

不合法的爬虫

用户数据

部分网站、APP数据超过指定数量

明文规定不让爬取

页面上标明

影响业务

影响服务器

类似DDOS攻击的问题

提示

在域名后加上/robots.txt查看是否让爬取

部分爬虫虽然违法,但公司、或企业不会直接报警。会采用反爬的手段,严重后才会报警

反爬与反反爬

反爬

有时企业不想自己的数据被别人拿到。这时就会设置反爬的手段,来不让爬虫获取数据

反爬虫常用一些手段

合法检测:请求校验(useragent,referer,接口加签 ,等)

验证码:识别文字、做题、滑动等

小黑屋:IP/用户限制请求频率,或者直接拦截

投毒:反爬虫高境界可以不用拦截,拦截是一时的,投毒返回虚假数据,可以误导竞品决策

反反爬

破解掉反爬手段,再获取其数据。

开发爬虫的基本流程

基本流程

1目标数据:想要什么数据

2来源地址

3结构分析

具体数据在哪(网站、还是APP)

如何展示的数据

4实现构思

5操刀编码

基本手段

1破解请求限制

请求头设置,如:useragant为有效客户端

控制请求频率(根据实际情景)

IP代理

签名/加密参数从html/cookie/js分析

2破解登录授权

请求带上用户cookie信息

3破解验证码

简单的验证码可以使用识图读验证码第三方库

解析数据

1HTML Dom解析

正则匹配,通过的正则表达式来匹配想要爬取的数据,如:有些数据不是在html 标签里,而是在html的script 标签的js变量中

使用第三方库解析html dom,比较喜欢类jquery的库

2数据字符串

正则匹配(根据情景使用)

转 JSON/XML 对象进行解析

浏览器开发者工具

对于爬虫来说,最核心的就是发送请求,让网络服务器返回相应的数据。而最为核心之一就是找到URL,这时就需要一个可以帮助我们分析URL的工具,浏览器开发者工具

打开方式

打开浏览器,按快捷键F12即可打开

基本API 

导入所需的类库

from urllib.request import Request, urlopen

发送请求

requset.urlopen(url,data,timeout)

url即URL,必须要

data是访问URL时要传送的数据默认为空None

timeout是设置超时时间默认为socket._GLOBAL_DEFAULT_TIMEOUT

获取响应

response.getcode()

返回 HTTP的响应码,成功返回200,4服务器页面出错,5服务器问题

response.read()

read()方法就是读取文件里的全部内容,返回bytes类型

resp.read().decode()#decode() 默认UTF-8

resp.read().decode()[:1500]#decode()默认UTF-8 并且用切片操作截取前1500个字符

response.geturl()

返回 返回实际数据的实际URL,防止重定向问题

response.info()

返回 服务器响应的HTTP报头

使用urllib.request.urlopen发送请求时,可以将参数封装到一个Request对象中

url 发送的请求链接

headers 请求头信息

data 请求数据

发送请求/响应header头的含义

Accept告诉服务器,客户端支持的数据类型

Accept-Charset告诉服务器,客户端采用的编码

Accept-Encoding告诉服务器,客户机支持的数据压缩格式

Accept-Language告诉服务器,客户机的语言环境

Host客户机通过这个头告诉服务器,想访问的主机名

If-Modified-Since客户机通过这个头告诉服务器,资源的缓存时间

Referer客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)

User-Agent客户机通过这个头告诉服务器,客户机的软件环境【用于伪装,访问后拿过来】

Cookie客户机通过这个头告诉服务器,可以向服务器带数据

Refresh服务器通过这个头,告诉浏览器隔多长时间刷新一次

Content-Type服务器通过这个头,回送数据的类型

Content-Language服务器通过这个头,告诉服务器的语言环境

Server服务器通过这个头,告诉浏览器服务器的类型

Content-Encoding服务器通过这个头,告诉浏览器数据采用的压缩格式

Content-Length服务器通过这个头,告诉浏览器回送数据的长度

第一个爬虫

先写个最简单爬虫,爬取百度的首页里面的内容

from urllib.request import urlopen
 
response = urlopen("http://www.baidu.com/")
print(response.read().decode())

你可能感兴趣的:(Python,python,爬虫,开发语言)