爱站网关键词挖掘易营宝网站建设
爱站网关键词挖掘,易营宝网站建设,许昌住房城乡建设局网站,网站欣赏 公司网站案例四、#xff08;2#xff09;获取数据#xff08;补充urllib#xff09;#xff08;爬虫及数据可视化#xff09; urllibget请求post请求User-AgentResponse模拟真实信息在豆瓣spider中真实实现 urllib
此处的扩展#xff0c;可以进行在主体的程序学习完成后#xff0… 四、2获取数据补充urllib爬虫及数据可视化 urllibget请求post请求User-AgentResponse模拟真实信息在豆瓣spider中真实实现 urllib
此处的扩展可以进行在主体的程序学习完成后再回过头来学习用于新的网站的爬取等分析
Python3中将urllib2中的功能整合到urllib中了使用urllib就可以了
此处主要讲解urllib的扩展可以增加创新性也可跳过不影响主代码的编写
get请求
#获取一个get请求
response urllib.request.urlopen(http://www.baidu.com) #打开网页并将网页的数据返回
#print(response) #打印结果http.client.HTTPResponse object at 0x0000013918EEF188
#从打印的结果可以看出返回来一个HTTPResponse的对象此对象包含网页的所有信息可以使用read读取出来
#print(response.read())
#对获取到的网页源码进行utf-8解码
print(response.read().decode(utf-8)) #使用decode(utf-8)解析防止中文乱码结果如下简写
!DOCTYPE html!--STATUS OK--
htmlheadmeta http-equivContent-Type contenttext/html;charsetutf-8meta http-equivX-UA-Compatible contentIEedge,chrome1meta contentalways namereferrermeta nametheme-color content#2932e1meta namedescription content全球最大的中文搜索引擎、致力于让网民更便捷地获取信息找到所求。百度超过千亿的中文网页数据库可以瞬间找到相关的搜索结果。link relshortcut icon href/favicon.ico typeimage/x-icon /link relsearch typeapplication/opensearchdescriptionxml href/content-search.xml title百度搜索 /link relicon sizesany mask
...........scriptif (navigator.userAgent.indexOf(Edge) -1) {var body document.querySelector(body);body.className browser-edge;}
/script
textarea ids_is_result_css styledisplay:none;post请求
#获取一个post请求 #访问网址可发送表单可将用户名、密码加密 #post必须有服务器端的获取响应才行又不想写一个服务器代码使用网址httpbin.org可用来测试 #当向此网址发送请求时会响应可进行测试自己的请求的响应 #获取一个post请求
#访问网址可发送表单可将用户名、密码加密
#post必须有服务器端的获取响应才行又不想写一个服务器代码使用网址httpbin.org可用来测试
#当向此网址发送请求时会响应可进行测试自己的请求的响应response urllib.request.urlopen(http://httpbin.org/post) #此处默认进行post请求的
print(response) #直接打印会报错urllib.error.HTTPError: HTTP Error 405: METHOD NOT ALLOWED#是不能直接进行post访问的需要对发送表单封装才能进行post访问
import urllib.request
import urllib.parse #解析器可以解析键值对#bytes() 可以将里面数据转换成2进制的数据包
data bytes(urllib.parse.urlencode({hello:world}),encodingutf-8) #使用utf-8的方式将键值对解析并封装成2进制数据
#data可以作为post传递的内容
response urllib.request.urlopen(http://httpbin.org/post,datadata)
print(response.read().decode(utf-8))上方一段代码运行后
Response body
{args: {}, data: , files: {}, form: {hello: world}, headers: {Accept-Encoding: identity, Content-Length: 11, Content-Type: application/x-www-form-urlencoded, Host: httpbin.org, User-Agent: Python-urllib/3.7, X-Amzn-Trace-Id: Root1-5fb778bb-56192ac74ae35b32718702aa}, json: null, origin: 218.201.130.74, url: http://httpbin.org/post
}上方会将收到的表单放入form显示 使用urlib模拟浏览器发送请求
若使用post方式访问是必须按照post方式封装数据
#get请求无需传递data
response urllib.request.urlopen(http://httpbin.org/get)
print(response.read().decode(utf-8))User-Agent
下方的User-Agent直接告诉浏览器自己是爬虫若对方有防御只要有Python-urllib/3.7就无法爬取。
{args: {}, headers: {Accept-Encoding: identity, Host: httpbin.org, User-Agent: Python-urllib/3.7, X-Amzn-Trace-Id: Root1-5fb77b02-41623d10507c765005fe7ed1}, origin: 218.201.130.74, url: http://httpbin.org/get
}Response
单段代码可直接运行
import urllib.request#超时处理
#对于超时需要有个计划性的准备
#不一定是0.01秒正常3秒5秒还没有响应就不用爬取了
try:response urllib.request.urlopen(http://httpbin.org/get,timeout0.01) #此处若超时0.01就报错print(response.read().decode(utf-8))
except urllib.error.URLError as e: #若有多个错误可以加入print(timeout)#当返回状态码为418则表明被发现是爬虫了
#平常经常使用请求看网页看信息此处可以简单解析
#response urllib.request.urlopen(http://douban.com)
#print(response.status) #urllib.error.HTTPError: HTTP Error 418: 被发现是爬虫#response urllib.request.urlopen(http://httpbin.org/get)
#print(response.status) #200 表示正常response urllib.request.urlopen(http://www.baidu.com)
print(response.getheaders()) #拿到整个header信息
print(response.getheader(Server)) #可以拿到里面的具体内容打印结果
[(Bdpagetype, 1), (Bdqid, 0xab3ddba0000896e8), (Cache-Control, private), (Content-Type, text/html;charsetutf-8), (Date, Fri, 20 Nov 2020 08:41:34 GMT), (Expires, Fri, 20 Nov 2020 08:41:20 GMT), (P3p, CP OTI DSP COR IVA OUR IND COM ), (P3p, CP OTI DSP COR IVA OUR IND COM ), (Server, BWS/1.1), (Set-Cookie, BAIDUIDF9D3BADF25A1AA5CE17143909FE3D220:FG1; expiresThu, 31-Dec-37 23:55:55 GMT; max-age2147483647; path/; domain.baidu.com), (Set-Cookie, BIDUPSIDF9D3BADF25A1AA5CE17143909FE3D220; expiresThu, 31-Dec-37 23:55:55 GMT; max-age2147483647; path/; domain.baidu.com), (Set-Cookie, PSTM1605861694; expiresThu, 31-Dec-37 23:55:55 GMT; max-age2147483647; path/; domain.baidu.com), (Set-Cookie, BAIDUIDF9D3BADF25A1AA5C801B5470001E58EF:FG1; max-age31536000; expiresSat, 20-Nov-21 08:41:34 GMT; domain.baidu.com; path/; version1; commentbd), (Set-Cookie, BDSVRTM0; path/), (Set-Cookie, BD_HOME1; path/), (Set-Cookie, H_PS_PSSID1463_32855_33117_33058_31253_33099_33100_32962_26350_22158; path/; domain.baidu.com), (Traceid, 1605861694261455130612339260034306840296), (Vary, Accept-Encoding), (Vary, Accept-Encoding), (X-Ua-Compatible, IEEdge,chrome1), (Connection, close), (Transfer-Encoding, chunked)]
BWS/1.1与下方的进行对比可得 Response引入的对象不仅仅将网页信息保存还能获取请求中的头部信息状态码等。
#爬取爬虫时需要将自己模拟为一个浏览器
url https://www.douban.com
#需要将自己的请求对象再次封装一下
req urllib.request.Request(urlurl,datadata,headersheaders,methodPOST)主要的是user-agent这就是关键要想完全模拟甚至可以将上面的所有内容argsdataheaders等键值对中的全部封装
Headers中的内容怎么得到在浏览器的检查中有user-agent将当前浏览器的复制下来
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36}模拟真实信息
#爬取爬虫时需要将自己模拟为一个浏览器
#url https://www.douban.com
url http://httpbin.org/post
#需要将自己的请求对象再次封装一下
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36}
data bytes(urllib.parse.urlencode({name:eric}),encodingutf-8) #使用utf-8的方式将键值对解析并封装成2进制数据
#data可以作为post传递的内容
req urllib.request.Request(urlurl,datadata,headersheaders,methodPOST) #构建的是请求对象
#需要发出请求
response urllib.request.urlopen(req)
print(response.read().decode(utf-8))#下面是访问真实豆瓣的代码可以模拟浏览器欺骗豆瓣了
#爬取爬虫时需要将自己模拟为一个浏览器(爬取豆瓣的网页一定要将浏览器的user-agent信息填写)
url https://www.douban.com
#需要将自己的请求对象再次封装一下
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36}
#data bytes(urllib.parse.urlencode({name:eric}),encodingutf-8) #使用utf-8的方式将键值对解析并封装成2进制数据
#data可以作为post传递的内容
req urllib.request.Request(urlurl,headersheaders) #构建的是请求对象
#需要发出请求
response urllib.request.urlopen(req)
print(response.read().decode(utf-8))打印结果如下
!DOCTYPE HTML
html langzh-cmn-Hans classua-windows ua-webkit
head
meta charsetUTF-8
meta namegoogle-site-verification contentok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeyw /
meta namedescription content提供图书、电影、音乐唱片的推荐、评论和价格比较以及城市独特的文化生活。
meta namekeywords content豆瓣,小组,电影,同城,豆品,广播,登录豆瓣
meta propertyqc:admins content2554215131764752166375 /
meta propertywb:webmaster content375d4a17a4fa24c2 /
meta namemobile-agent contentformathtml5; urlhttps://m.douban.com
title豆瓣/title
script
。。。在豆瓣spider中真实实现 https://movie.douban.com/top250?start0 User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36#得到指定一个url的网页内容
def askURL(url):#head作用是为了让对方自己是浏览器模拟浏览器头部信息向豆瓣服务器发送消息#head信息一定不要写错否则会返回否码为418对方不认为我们是浏览器head {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36} #如果信息不多的话可以使用键值对的方式若很多的话可以使用列表的方式head[]#用户代理。表示告诉豆瓣服务器。我们是什么类型的机器。浏览器本质上是告诉浏览器。我们可以接收什么水平的文件内容#发送消息使用下方方式request urllib.request.Request(urlurl, headershead) # 构建的是请求对象,使用Request()封装了请求对象,此对象包含url和head头部信息#可以携带头部信息访问url,try:response urllib.request.urlopen(request) #发送请求对象返回一个response对象此对象包含我们的网页信息html response.read().decode(utf-8) #将读取的html界面读取出来print(html)except urllib.error.URLError as e: #访问时可能会遇到404遇到一些浏览器内部错误如500等if hasattr(e,code): #将里面的如404等code打印出来print(e.code)if hasattr(e, reason): #将产生的错误的原因打印出来print(e.reason)return html执行上面的函数可以得到结果如下
!DOCTYPE html
html langzh-CN classua-windows ua-webkit
headmeta http-equivContent-Type contenttext/html; charsetutf-8meta namerenderer contentwebkitmeta namereferrer contentalwaysmeta namegoogle-site-verification contentok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeyw /title
豆瓣电影 Top 250
/titlemeta namebaidu-site-verification contentcZdR4xxR7RxmM4zE /meta http-equivPragma contentno-cache
meta http-equivExpires contentSun, 6 Mar 2005 01:00:00 GMT
。。。。。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90955.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!