爬虫------基础

客户端与服务器的数据传输有两种一种是json一种是xml
企业产生的用户数据:
百度指数:http://index.baidu.com/
阿里指数:https://alizs.taobao.com/
TBI腾讯浏览指数:http://tbi.tencent.com/
新浪微博指数:http://data.weibo.com/index
数据平台购买数据:
数据堂:http://www.datatang.com/about/about-us.html
国云数据市场:http://www.moojnn.com/data-market/
贵阳大数据交易所:http://trade.gbdex.com/trade.web/index.jsp
数据管理咨询公司:
麦肯锡:http://www.mckinsey.com.cn/
埃森哲:https://www.accenture.com/cn-zh/
艾瑞咨询:http://www.iresearch.com.cn/
爬虫定义:网络爬虫(又被称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.
通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分
聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于: 聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
爬虫的原理:爬虫是模拟用户在浏览器或者某个应用上的操作。浏览器不能访问的不能爬取
User-Agent:是客户浏览器的名称,代表浏览器身份,有些时候同样的网站使用不同浏览器访问返回的数据会不一样。
Headers —— 显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等。
1. urlopen--打开连接urlopen默认是get请求
urlopen()函数,url是必须要传入的,data如果传入就是POST请求,如果不传就是GETT请求
from urllib.request import Request,urlopen
Headers= {"User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"}
模拟浏览器:request = Request("http://www.atguigu.com",headers=ua_header)
#查看请求信息
request_info =request.get_header(header_name="Connection")
#得到响应码code = response.getcode()
#返回实践数据的url,防止重定向url = response.geturl()
#返回服务器的响应报头信息info = response.info()
#也可以通过调用Request.add_header() 添加/修改一个特定的header
request.add_header("User-Agent", user_agent)
# 第一个字母大写,后面的全部小写,否则获取不了
request_info = request.get_header("User-agent")
GET方式
ur中文编码解码网站:http://tool.chinaz.com/tools/urlencode.aspx
from urllib import parse
ur中文编码:key = {'kw':'尚硅谷'}    result = parse.urlencode( key)
ur中文解码:result = parse.unquote("kw =%e5%b0%9a%e7%a1%85%e8%b0%b7")
POST方式:
data ={"name":"zhangsan","age":"18"}     data=parse.urlencode(data).encode("utf-8")
#urlopen()函数,url是必须要传入的,data如果传入就是POST请求,如果不传就是GET请求
response = urllib.request.urlopen(url,data=data)
 获取AJAX加载的内容
有些网页内容使用AJAX加载,只要记得,AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了。
url地址路径不变,但有请求向服务器(别的)发送。用Fiddler4找到ajax里面有http的get请求
处理HTTPS请求 SSL证书验证
import ssl
context = ssl._create_unverified_context()
# 传入请求路径和请求头新
request = Request(url, headers = headers)
# 发起请求,并且忽略ssl验证
response = urlopen(request,context=context)
简单的自定义opener()
build_opener ()返回的对象具有open()方法,与urlopen()函数的功能相同
如果在 HTTPHandler()增加 debuglevel=1参数,还会将 Debug Log 打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来方便调试,有时可以省去抓包的工作
from urllib.request import HTTPHandler,Request,build_opener
# 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
http_handler = HTTPHandler()
# 调用build_opener()方法,创建支持处理HTTP请求的opener对象
opener = build_opener(http_handler)
# 构建 Request请求
request = Request("http://atguigu.com/")
# 调用自定义opener对象的open()方法,发送request请求
response = opener.open(request)
# 获取服务器响应内容
print(response.read().decode("utf-8"))
ProxyHandler处理器(代理设置)
使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的。
西刺免费代理IP:http://www.xicidaili.com/
快代理免费代理:https://www.kuaidaili.com/free/inha/
全网代理IP:http://http.zhiliandaili.com/
测试代理服务器是否可行:https://www.kuaidaili.com/check
开放代理(免费)设置代理:
httpproxy_handler = ProxyHandler({"http" : "119.28.152.208:80"})网址端口取网上查
随机选择一个代理
proxy = random.choice(proxy_list)# 使用选择的代理构建代理处理器对象
私密代理(付费)
快代理免费代理:https://www.kuaidaili.com/free/inha/注册后就可以购买,实验的话买便宜的独享代理即可。登录快速免费代理网站账号和密码:
proxy_hander = ProxyHandler({"http":"trygf521:a4c4avg9@114.67.228.126:16819"})
Cookie原理
HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话。
使用cookie时在头文件里加入cookie即可
cookielib模块:主要作用是提供用于存储cookie的对象
Python 3 中把cookielib改成 http.cookiejar
HTTPCookieProcessor处理器:主要作用是处理这些cookie对象,并构建handler对象。
案例:from urllib.request import HTTPCookieProcessor,build_opener
from http.cookiejar import CookieJar
# 构建一个CookieJar对象实例来保存cookie
cookiejar = CookieJar()
# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = HTTPCookieProcessor(cookiejar=cookiejar)
opener = build_opener(handler)
# 以open方法访问页面,访问之后会自动保存cookie到cookiejar中
response = opener.open("http://www.baidu.com/")
# 通过自定义opener的addheaders的参数,可以添加HTTP报头参数
opener.addheaders = [("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36")]
urllib.request 的异常错误处理
在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误。
1. URLError--没有网络、服务器连接失败、找不到服务器
2.HTTPError是URLError的子类如果urlopen或opener.open不能处理的,会产生一个HTTPError(捕获异常要放在前面)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值