首页
旅行足迹
友链
留言
关于
壁纸
Search
1
小米12Pro为例,新版小米手机安装magisk获取root教程
2,572 阅读
2
在html中通过vue3-sfc-loader引用.vue文件
1,785 阅读
3
vscode+docker开启Xdebug3功能调试PHP
1,738 阅读
4
目前贼拉好用的ChatGPT应用
1,410 阅读
5
Windows系统删除资源管理器侧边的3D对象等
1,356 阅读
玩机教程
软件设计师
前端
Vue
JavaScript
后端
Python
java
Search
标签搜索
python
flask
Django
爬虫
软件设计师
数据结构
Scrapy
玩机教程
PHP
LNMP
Ubuntu
Hexo
算法
ROOT
刷机
前端
JavaScript
webhook
自动化部署
binscor
累计撰写
43
篇文章
累计收到
4
条评论
首页
栏目
玩机教程
软件设计师
前端
Vue
JavaScript
后端
Python
java
页面
旅行足迹
友链
留言
关于
壁纸
搜索到
43
篇与
的结果
2019-07-26
3.登录相关、代理
URLErrorURLError是HTTPError的父类型:出现URLError的错误原因:没有网服务器连接失败找不到指定的服务器import urllib.request import urllib.error url = 'http://www.basjdfkjgkfjgfjhd.com.cn' try: re = urllib.request.urlopen(url) print('here') except urllib.error.URLError as e: print(e.reason) # [Errno 11001] getaddrinfo failedHandler处理器、自定义Opener高级功能的处理:使用代理和cookie#向百度发起一个请求 url='http://www.baidu.com/' #1.创建一个Handler处理器对象 handler=urllib.request.HTTPHandler() #2,通过处理器对象生成一个Opener对象 opener=urllib.request.build_opener(handler) #opener作用:发起请求 request=urllib.request.Request(url) response=opener.open(request) print(response.read()) # <http.client.HTTPResponse at 0x7dbd780>代理生活:中介,代购程序: 正向代理:代理客户端获取数据 反向代理:代理服务器提供数据#使用代码的形式设置客户端代理 #创建处理器对象 handler=urllib.request.ProxyHandler(proxies={'http':'112.95.224.58:80'}) #2。创建opener对象,然后使用该对象发起一个请求 opener=urllib.request.build_opener(handler) url='https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=IP&oq=%25E8%25A5%25BF%25E5%2588%25BA%25E4%25BB%25A3%25E7%2590%2586&rsv_pq=fee3639900007be7&rsv_t=0d8cHJ8skuhEa3sCpORP%2FnTD7xO8gLUHq1Azm%2FXGJmqWlTIM3GuMWBSzjTg&rqlang=cn&rsv_enter=1&inputT=1271&rsv_sug3=12&rsv_sug1=6&rsv_sug7=100&rsv_sug2=0&rsv_sug4=1271' response=opener.open(url) with open('./daili.html','wb') as fp: fp.write(response.read())cookiecookie是什么?http协议,无状态网站登录时候的时候,用来记录用户身份的#模拟登陆-cookie #人人网案例:进入需要登录才可以访问的网页,则可以带着cookie值进行访问 url='http://www.renren.com/289676607/profile' headers={ "Cookie": "anonymid=jl1x24dy-u0udsq; depovince=BJ; _r01_=1; __utma=151146938.1794929042.1534809369.1534809369.1534809369.1; __utmz=151146938.1534809369.1.1.utmcsr=renren.com|utmccn=(referral)|utmcmd=referral|utmcct=/; _de=0832477C7D3BDE6C8C7E21AC68FA766C7DE1374C26B60001; ln_uact=www.zhangbowudi@qq.com; ln_hurl=http://hdn.xnimg.cn/photos/hdn221/20120418/1315/h_main_0Rbs_563500058dec2f76.jpg; jebe_key=626a9db1-7655-44f4-a1f2-6f69b1e0e681%7C55b0a29313d4d905d984b3769dc164d4%7C1534809469266%7C1%7C1534809477953; jebecookies=56edc7c2-4deb-4e27-8742-b6393274dfc7|||||; JSESSIONID=abcH2ScyV4I-2baIjJBvw; ick_login=9fc272ea-6b5d-4898-ae49-9813f4d7331b; p=0c58e07ece2863c4a02deda63944262a7; first_login_flag=1; t=e39afe60de96d0a877661965f4b7bacf7; societyguester=e39afe60de96d0a877661965f4b7bacf7; id=289676607; loginfrom=syshome; wp_fold=0; xnsid=a47161ec" } request=urllib.request.Request(url,headers=headers) response=urllib.request.urlopen(request) with open('./renren.html','wb') as fp: fp.write(response.read())cookiejar对象作用:自动保存请求中的cookie数据信息注意:必须和handler和opener一起使用创建一个cookiejar对象import http.cookiejarcj = http.cookiejar.CookieJar()通过cookiejar创建一个handlerhandler = urllib.request.HTTPCookieProcessor(cj)根据handler创建一个openeropener = urllib.request.build_opener(handler)再往下所有的操作都是用opener.open方法去发送请求,因为这里面带着cookie过去了代码:#使用cookiejar实现人人网的登陆 import urllib.request import urllib.parse import http.cookiejar cj = http.cookiejar.CookieJar() #请求中的cookie会自动存储到cj对象中 #创建处理器对象(携带cookiejar对象的) handler=urllib.request.HTTPCookieProcessor(cj) #创建opener对象 (携带cookiejar对象) opener=urllib.request.build_opener(handler) #要让cookiejar获取请求中的cookie数据值 url='http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=201873958471' #自定义一个请求对象,让该对象作为opener的open函数中的参数 data={ "email":"www.zhangbowudi@qq.com", "icode":"", "origURL":"http://www.renren.com/home", "domain":"renren.com", "key_id":"1", "captcha_type":"web_login", "password":"40dc65b82edd06d064b54a0fc6d202d8a58c4cb3d2942062f0f7dd128511fb9b", "rkey":"41b44b0d062d3ca23119bc8b58983104", 'f':"https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DpPKf2680yRLbbZMVdntJpyPGwrSk2BtpKlEaAuKFTsW%26wd%3D%26eqid%3Deee20f380002988c000000025b7cbb80" } data=urllib.parse.urlencode(data).encode() request=urllib.request.Request(url,data=data) opener.open(request) #获取当前用户的二级子页面 s_url='http://www.renren.com/289676607/profile' resonse=opener.open(s_url) with open('./renren.html','wb') as fp: fp.write(resonse.read())
2019年07月26日
529 阅读
0 评论
0 点赞
2019-07-18
2.根据不同请求爬取数据(get、post)
urllib库urllib:python自带的一个包。模拟浏览器发送请求Python2:urllib2 urllibPython3:urllib.parse urllib.request#最简单的爬虫程序 #1.指定一个url #2.编写爬虫程序模拟浏览器发起一个请求 #3.获取数据,解析数据 import urllib.request import urllib.parse url='http://www.baidu.com/' response=urllib.request.urlopen(url) #HTTPResponse:响应对象类型 data=response.read() #获取响应回客户端的数据值(bytes) data=data.decode() print(data)import urllib.request import urllib.parse url='http://www.baidu.com/' response=urllib.request.urlopen(url) #response.getcode() #状态码 #response.getheaders() #请求头信息 response.geturl() #网址#将响应会的数据值写入磁盘进行存储 url='http://www.baidu.com/' response=urllib.request.urlopen(url) #HTTPResponse:响应对象类型 data=response.read().decode() #获取响应回客户端的数据值(bytes) with open('./test/baidu.html','w') as fp: fp.write(data)保存图片方式一:#忽略证书:如果爬虫程序发起的是一个https请求,则必须执行如下代码进行证书的忽略 import ssl ssl._create_default_https_context = ssl._create_unverified_context #图片,音频,视频 必须为二进制类型 image_url='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1534761981365&di=fa19817d15b6234ce5735d5007a95367&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2F21a4462309f79052b0ac781007f3d7ca7bcbd568.jpg' image_response=urllib.request.urlopen(image_url) image_data=image_response.read() with open('./test/data.jpg','wb') as fp: fp.write(image_data)方式二:#保存图片数据的第二种方式 url='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1534825530753&di=3d46bfef5943bbed7b4301bc198cfc2e&imgtype=0&src=http%3A%2F%2Fwww.qqma.com%2Fimgpic2%2Fcpimagenew%2F2018%2F4%2F5%2F6e1de60ce43d4bf4b9671d7661024e7a.jpg' urllib.request.urlretrieve(url=url,filename='tupian.jpg') # ('tupian.jpg', <http.client.HTTPMessage at 0x6166978>)url特性:url必须为ascii编码(字母,数字,符号)。url必须由字母,数字,下划线或者符号组成。urllib.parse.quote()#urllib.parse.quoteu() 可以将非ASCII的字符编码成ASCII urllib.parse.quote('人民币') #注意:如果使用quote的话,该函数只可以为url中非ASCII的字符进行编码 ## %E4%BA%BA%E6%B0%91%E5%B8%81url='https://www.baidu.com/s?ie=utf-8&wd=%s' wd=urllib.parse.quote('人民币') url=format(url%wd) #接下来就可以对url发起一个请求urllib.parse.urlencode()#制定爬去百度中任意关键字对应的页面 url='http://www.baidu.com/s?' wd=input('enter a word:') data={ 'ie':'utf-8', 'wd':wd } #需要对url进行转码 data=urllib.parse.urlencode(data) url+=data response=urllib.request.urlopen(url) filename='./test/'+wd+".html" with open(filename,'wb') as fp: fp.write(response.read())通过修改UA的值进行身份的伪装:UA是存在于哪里请求需要自制定request对象#自己编写一个请求头 header={ "User-Agent":" Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" } #Request()该函数返回一个自制定的请求对象,我们可以手动的给该请求对象中参数赋值 request=urllib.request.Request(url=url,headers=header) urllib.request.urlopen(request)使用爬虫爬取get请求采用字符串拼接的方式将get请求的网址拼接起来import urllib.request import urllib.parse url='http://www.baidu.com/s?' data={ 'ie':'utf-8', 'wd':'你好吗' } data=urllib.parse.urlencode(data) #将get请求后的参数存入字典,然后再用urlencode()方法将字典格式化处理,变为 ie=utf-8&wd=%E4%BD%A0%E5%A5%BD%E5%90%97 ,且为ascii码,这是url的特性 url += data #将网址拼接为完整get请求http://www.baidu.com/s?ie=utf-8&wd=%E4%BD%A0%E5%A5%BD%E5%90%97 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5792.400 QQBrowser/10.2.2101.400' } request=urllib.request.Request(url,headers=headers) response=urllib.request.urlopen(request) print(response.read().decode())使用爬虫爬取post请求由于post的特点,无法通过字符串拼接url的方式进行请求import urllib.request import urllib.parse post_url='https://fanyi.baidu.com/sug' #1.该请求是一个post(携带参数) data={ "kw":"dog" } data=urllib.parse.urlencode(data) headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" } #自定义请求对象 request=urllib.request.Request(post_url,data=data.encode(),headers=headers) #自定义的请求对象中的参数(data必须为bytes类型) response=urllib.request.urlopen(request) print(response.read().decode('unicode_escape'))使用爬虫爬取Ajax的get请求ajax的get请求:豆瓣网的分类排行榜案例分析url='https://movie.douban.com/j/chart/top_list?' start=input('enter the start:') data={ "type":'5', "interval_id":"100:90", "action":'', "start":start, "limit":1 } data=urllib.parse.urlencode(data).encode() headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" } request=urllib.request.Request(url,data,headers=headers) response=urllib.request.urlopen(request) print(response.read().decode())使用爬虫爬取Ajax的post请求**ajax的post请求:参考案例:http://www.kfc.com.cn/kfccda/index.aspx肯德基餐厅查询**url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' city=input('enter the city of you want to search:') data={ "cname":'', "keyword":city, "pageIndex":'1', "pageSize":"10", "pid":'' } data=urllib.parse.urlencode(data).encode() headers={ "User-Agent":" Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" } request=urllib.request.Request(url,data,headers) response=urllib.request.urlopen(request) print(response.read().decode())综合练习:百度贴吧需求:输入吧名,输入起始页码和结束页码,然后在当前文件夹中创建一个以吧名为名字的文件夹,里面是每一页html内容,文件名是吧名_pageNum.htmlimport ssl import os ssl._create_default_https_context = ssl._create_unverified_context url='http://tieba.baidu.com/f?' name=input('enter name:') s_pageNum=int(input('enter start pageNum:')) e_pageNum=int(input('enter end pageNum:')) #创建一个存储html文件的文件夹 if not os.path.exists(name): os.mkdir(name) for page in range(s_pageNum,e_pageNum+1): print('开始下载第%d页的内容'%page) data={ "kw":name, "ie":'utf-8', "pn":(page-1)*50 } data=urllib.parse.urlencode(data) request=urllib.request.Request(url,data.encode()) response=urllib.request.urlopen(request) #文件名称 fileName=name+"_"+str(page)+'.html' filePath=name+'/'+fileName with open(filePath,'wb') as fp: fp.write(response.read()) print('结束下载第%d页的内容'%page) ''' enter name:周杰伦 enter start pageNum:0 enter end pageNum:3 开始下载第0页的内容 结束下载第0页的内容 开始下载第1页的内容 结束下载第1页的内容 开始下载第2页的内容 结束下载第2页的内容 开始下载第3页的内容 结束下载第3页的内容 '''
2019年07月18日
517 阅读
0 评论
0 点赞
2019-07-18
1.爬虫入门了解
爬虫概念什么是爬虫?概念:编写程序去互联网上爬取数据的过程哪些语言可以实现爬虫?javaphpc/c++python:提供了无限的模块爬虫的分类聚焦爬虫:“抓取系统”通用爬虫:根据制定的需求获取网页中制定的数据值问题:爬虫程序如何获取网站中的数据值?主动提交url搜索引擎公司会和DNS服务商进行合作robots.txt:口头的协议。如果门户网站指定了该协议后,表示该门户拒绝搜索引擎和爬虫程序爬去网站中的数据。http协议附:HTTP教程什么是http协议?服务器和客户端之间传输数据的一种形式HTTP 工作原理?HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP默认端口号为80,但是你也可以改为8080或者其他端口。HTTP三点注意事项:HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。一个http请求都包含什么?请求行:上图中的1,2,3请求头:请求体:learn-url常用的请求头: Accept-charsets:浏览器支持的字符类型get 和post请求:GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制的,而POST么有。对参数的数据类型,GET只接受ASCII字符,而POST没有限制。GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。GET参数通过URL传递,POST放在Request body中。https协议?HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。sslhttps和http的区别?超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS和HTTP的区别主要为以下四点:(1)、https协议需要到ca申请证书,一般免费证书很少,需要交费。(2)、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。(3)、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。(4)、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。fiddler什么是fiddler?专业的抓包工具,青花瓷配置:配置可以抓取https请求的操作有些浏览器也自带抓包工具fiddler的基本使用:右上:请求区域header:请求的头信息(UA,cookie)WebForms:请求对象中夹带的数据值Raw:请求对象中主要的详情json:接口XML:接口右下:响应区域
2019年07月18日
407 阅读
0 评论
0 点赞
1
...
4
5