Python——爬虫——爬虫的原理与数据抓取
一、使用Fiddler抓取HTTPS设置
(1)菜单栏 Tools > Telerik Fiddler Options 打开“Fiddler Options”对话框
(2)HTTPS设置:选中Capture HTTPS CONNECTs(捕捉HTTPS连接),选中Decrypt HTTPS traffic(解密HTTPS通信),另下拉菜单中选中...from all processess(从所有进程),与lgnore server certificate errors(忽略服务器证书错误)
(3)为Fiddler配置Windows信任:Trust Root Certificate(受信任的根证书)
(4)Connection中选中:Allow remote computers to connect(允许远程连接),Act as system proxy on startup(作为系统启动代理)
(5)重启Fiddler,使配置生效(这一步必须做)
二、使用Fiddler捕捉Chrome的会话
(1)安装SwitchyOmega代理管理Chrome浏览器插件
(2)设置代理服务器为:127.0.0.1:8888
(3)通过浏览器插件换设置好的代理
三、常用请求头
https://www.cnblogs.com/cxys85/p/9816319.html
四、Cookie和Session
(1)Cookie:通过客户端记录的信息确定用户的身份
(2)Session:通过服务器记录的信息确定用户的身份
**urllib2在python3.x中被修改成urllib.request
五、函数解析
(1)resoponse = urllib.request.urlopen(url,data=None,timeout=<object objcet>
url:第一个参数必须传送
data:经过编码的post数据,默认为空
timout:可选超时期,默认为60s
(2)response.read():读取返回的文本
(3)response.getcode():返回整数形式的HTTP响应代码
(4)response.geturl():返回的数据的实际url
(5)response.info:返回映射对象(HTTP报头)
(6)urllib.urlencode():转换url编码格式(字符串)
(7)urllib.unquote():解码工作
(8)request.add_data():将data数据传入request内
六、自定义Opener
urlopen函数不支持代理、cookie或者其他的HTTP高级功能,需要使用 build_opener() 函数创建自定义opener对象
(1)Proxy(代理)设置
import urllib.request
#定义一个代理开关
proxyWork =True
#定义两个代理模式,其中一个为不适用代理
h1 = urllib.request.ProxyHandler({"http":"111.111.111.111:80"})
h2 = urllib.request.ProxyHandler()
if proxyWork:
opener = urllib.request.build_opener(h1)
else:
opener = urllib.request.build_opener(h2)
#使用我们自定义的代理opener的open()方法打开url
response = opener.open("http://www.baidu.com/")
html = response.read()
print(html)
(2)Debug Log
import urllib.request
#打开HTTP debug log
httpHandler = urllib.request.HTTPHandler(debuglevel=1)
#打开HTTPs debug log
httpsHandler = urllib.request.HTTPSHandler(debuglevel=1)
#同时使用两种不同的 debug log 模式
opener = urllib.request.build_opener(httpHandler,httpsHandler)
#使用install_opener来创建全局的opener
urllib.request.install_opener(opener=opener)
#urlopen默认使用之前创建的全局opener
response = urllib.request.urlopen("http://www.baidu.com")
七、Cookie
(1)Cookie格式: Set-Cookie: NAME=VALUE; Expires=DATE ;Path=PATH; Domain =DOMAIN_NAME; SECURE
**登录一般都会现有一个HTTP GET,用于拉取一些信息及获得 Cookie, 然后在HTTP POST 登录
(2)cookielib 模块,主要作用是提供用于存储cookie的对象,Python处理cookie一般是cookielib和HTTPCookieProcessor一起使用
该模块主要包括:CookieJar FileCookieJar MozillaCookieJar LWPCookieJar
(3)CookieJar : 管理HTTP cookie的值,存储HTTP请求生成的cookie、向传出的HTTP请求添加Cookie对象
(4)FileCookieJar(filename(文件名),delayload=None(延迟访问时间),policy=None):创建FileCookieJar 实例,用于检索cookie信息,并将cookie存储到文件中
(5)MozillaCookieJar (filename(文件名),delayload=None(延迟访问时间),policy=None):创建于Mozilla浏览器cookies.txt兼容的FileCookieJar实例
(6)LWPCookieJar (filename(文件名),delayload=None(延迟访问时间),policy=None):创建于libwww-perl的Set-Cookie3文件格式兼容的FileCookieJar实例
(7)代码实例
import urllib.request
import http.cookiejar
#声明一个CookieJar对象实例来保存cookie
cookie = http.cookiejar.CookieJar()
#利用HTTPCookieProcessor对象创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookiejar=cookie)
#通弄过handler来构建opener
opener = urllib.request.build_opener(handler)
#此处open方法同urlopen方法
response = opener.open("http://www.baidu.com")
#按照标准格式存储Cookie
cookies = ""
for item in cookie:
cookies = cookies + item.name + "=" + item.value + ";"
#舍去最后一位的分号
print(cookies[:-1])
使用get方法获取Cookie保存到变量
import urllib.request
import http.cookiejar
#设置保存cookie的文件,同级目录的cookie.txt
filename = 'cookie.txt'
#声明一个LWPCookieJar(有save)实现对象实例保存cookie,之后写入文件
cookie = http.cookiejar.LWPCookieJar(filename=filename)
#利用HTTPCookieProcessor对象创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookiejar=cookie)
#通过handler来构建opener
opener = urllib.request.build_opener(handler)
#urlopen默认使用之前创建的全局opener
response = urllib.request.urlopen("http://www.baidu.com")
#保存cookie到文件,且忽略cookie失效限制
访问网站获得cookie
import urllib.request
import http.cookiejar
#创建LWPCookieJar(有load)实例对象
cookie = http.cookiejar.LWPCookieJar()
#从文件中读取cookie内容到变量,忽略cookie的使用失效
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
#创建请求的request
req = urllib.request("http://www.baidu.com")
#利用build_opener,创建一个opener
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar=cookie))
response = opener.open(req)
从文件中获取cookie并访问
八、捕捉异常
这样做我们可以首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。
import urllib.request
request = urllib.request.Request('http://www.baidu.com')
try:
urllib.request.urlopen(request)
except urllib.request.HTTPError:
print("")
except urllib.request.URLError:
print("")
else:
print("")
Python——爬虫——爬虫的原理与数据抓取的更多相关文章
- Python爬虫工程师必学——App数据抓取实战 ✌✌
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...
- Python爬虫工程师必学APP数据抓取实战✍✍✍
Python爬虫工程师必学APP数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- Python爬虫工程师必学——App数据抓取实战
Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- python爬虫(一)_爬虫原理和数据抓取
本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...
- [原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取
做数据分析和可视化工作,最重要的一点就是数据抓取工作,之前使用Java和python都做过简单的数据抓取,感觉用的很不顺手. 后来用nodejs发现非常不错,通过js就可以进行数据抓取工作,类似jqu ...
- python爬虫数据抓取方法汇总
概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...
- 爬虫---selenium动态网页数据抓取
动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页 ...
- python3爬虫再探之豆瓣影评数据抓取
一个关于豆瓣影评的爬虫,涉及:模拟登陆,翻页抓取.直接上代码: import re import time import requests import xlsxwriter from bs4 imp ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...
随机推荐
- GNOME图形界面的基本操作
成功登录进入CentOS系统之后,我们首先看到的桌面就是GNOME图形界面,下面来看一下相关的基本操作. 个性化设置 1,设置屏幕分辨率 进入菜单 2,更换桌面背景 进入下面菜单. 选择一张背景图片, ...
- React常见的15个问题
在 jsComplete,我们管理一个专门用于帮助编程学习者 slack 帐户.我们常常会收到一些有趣的问题,但大多数问题都是常见问题. 我创建这个资源为了帮助 React.js学习者遇到这些常见的问 ...
- Promise原理讲解 && 实现一个Promise对象 (遵循Promise/A+规范)
1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...
- 上海启动5G试用!104页PPT,为你深度解析5G终端的创新和机遇
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源:国泰君安证券 作者:分析师王聪.张阳.陈飞达 导读:2019年是5G元年,各大品牌将陆续推出5G ...
- bug优先级别
https://www.cnblogs.com/evablogs/p/6785083.html bug缺陷的优先级别 首先需要对一个版本进行冒烟测试,确定基本功能测试,如果不通过的话进行后期的测试已经 ...
- SQLServer之创建索引视图
索引视图创建注意事项 对视图创建的第一个索引必须是唯一聚集索引. 创建唯一聚集索引后,可以创建更多非聚集索引. 为视图创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的 ...
- Linux内核同步机制之(五):Read Write spin lock【转】
一.为何会有rw spin lock? 在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已.spin lock严格的限制只有一个 ...
- MFC自绘菜单
自绘控件问题多多.本文以菜单为例. ①当要使用顶层菜单资源.对话框资源.状态栏资源等这3种资源的任何一种.那么CWinApp::InitInstance函数内部必须使用LoadFrame函数来加载资源 ...
- LeetCode算法题-N-ary Tree Postorder Traversal(Java实现)
这是悦乐书的第269次更新,第283篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第136题(顺位题号是590).给定一个n-ary树,返回其节点值的后序遍历.例如,给定 ...
- linux ssh免密登陆远程服务器
10.170.1.18服务器免密登录到10.170.1.16服务器 首先登入一台linux服务器(10.170.1.18),此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成ke ...