专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Python数据获取初识Requests

  谈及到Python爬虫,必不可少的就是requests模块。前面内容中我们也讲到Python有丰富多彩的第三方模块,那么requests就是其中一个,requests模块是一个常用的访问网络的模块。使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(requests的本质也是对urllib3进行了封装)
  初识Requests
  先来一段简单的代码,看下request的作用。爬取百度首页的内容importrequestsurlhttps:www。baidu。comresponserequests。get(url)输出响应状态码print(状态码:{0}。format(response。statuscode))输出响应字符编码print(字符编码:{0}。format(response。encoding))输出响应文本内容print(响应文本:{0}。format(response。text))
  然后运行一下可以看见程序的结果:
  状态码:200字符编码:ISO88591响应文本:!DOCTYPEhtml!STATUSOKhtmlheadmetahttpequivcontenttypeontenttexthtml;charsetutf8metahttpequivXUACompatiblecontentIEEdgemetacontentalwaysnamereferrerlinkrelstylesheettypetextcsshrefhttps:ss1。bdstatic。com5eN1bjq8AAUYm2zgoY3Krwwwcachebdorzbaidu。min。csstitletitlehead。
  由于内容比较长,就先放一部分结果。我们可以看到请求响应状态是200,正确响应。
  响应的内容就是百度网页的HTML源码,然后浏览器拿到接收到的源码后,将其展示到页面上。而当我们用Python爬虫浏览页面的时候,只能看到的是网站的源码,然后在其中获取我们需要的信息。
  在上图上,我们可以发现,其实除了英文,还有一些乱码,乱码是由于编码格式造成的。一般情况下,网站都是使用兼容度高的UTF8编码格式,而当前的网页是使用的ISO88591,我们可以把拿到的response设置下编码格式:
  爬取百度首页的内容爬取百度首页的内容urlhttps:www。baidu。comresponserequests。get(url)response。encodingUTF8输出响应状态码print(状态码:{0}。format(response。statuscode))输出响应字符编码print(字符编码:{0}。format(response。encoding))输出响应文本内容print(响应文本:{0}。format(response。text))
  然后重新运行看下效果,结果如下图,现在可以看到正常的编码的网页源码。状态码:200字符编码:UTF8响应文本:!DOCTYPEhtml!STATUSOKhtmlheadmetahttpequivcontenttypecontenttexthtml;charsetutf8metahttpequivXUACompatiblecontentIEEdgemetacontentalwaysnamereferrerlinkrelstylesheettypetextcsshrefhttps:ss1。bdstatic。com5eN1bjq8AAUYm2zgoY3Krwwwcachebdorzbaidu。min。csstitle百度一下,你就知道titlehead。
  Requests模块使用简单,功能强大,完全可以实现常规简单爬虫的编写,所以熟练使用Requests是获取数据的核心基础,接下来我们了解一些常用的功能。请求的方式
  上面示例中requests。get()是用的GET请求方式,而HTTP请求可以使用多种请求方法,最常用的就是GET和POST请求。除此之外HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT,一共9种请求方式。各个请求方式主要的差别如下表所示,其中Requests是支持前7种请求方式。
  方法
  功能描述
  GET
  请求指定的页面信息,并返回响应(response)主体。
  HEAD
  类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
  POST
  向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
  PUT
  从客户端向服务器传送的数据取代指定的文档的内容。
  DELETE
  请求服务器删除指定的页面。
  CONNECT
  HTTP1。1协议中预留给能够将连接改为管道方式的代理服务器。
  OPTIONS
  允许客户端查看服务器的性能。
  TRACE
  回显服务器收到的请求,主要用于测试或诊断。
  PATCH
  是对PUT方法的补充,用来对已知资源进行局部更新。
  使用方式跟GET方式一样,直接requests跟请求方式关键词即可,如果发送一个POST请求:importrequestsurlhttps:www。baidu。compost请求responserequests。post(url)head请求responserequests。head(url)put请求responserequests。put(url)
  请求中传参数
  通常情况下,我们使用requests获取一个网页的内容,都会携带一些参数,服务器会根据这些参数的不同做出不同的响应,爬虫中最常使用的就是分页参数。比如说,我们想查看某个页面中第5页的内容,我们一般可以把页码参数设置为5加在请求连接中。那么怎么添加请求参数呢?
  如果是GET请求,最直接的方法可以手动构建,在链接后面添加参数。比如:importrequestsurlhttps:www。baidu。com?pageNum5pageSize10responserequests。get(url)
  当然Requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。拿上面的参数来说,代码如下:importrequestsurlhttps:www。baidu。comparams{pageNum:5,pageSize:10}responserequests。get(url,paramsparams)print(完整请求地址:{0}。format(response。url))
  而Requests最终的请求地址也是跟我们手动组装的链接是一样的,代码运行结果如下:
  完整请求地址:https:www。baidu。com?pageNum5pageSize10
  注意:字典里的值为None的键都不会被添加到URL中。
  除了GET请求,还有常用的POST请求。我们都知道POST请求安全性会比GET高,请求体不会直接添加在明文的链接中。一般网页中表单数据的提交都是通过POST请求进行,所以我们也需要知道,requests怎么在POST请求中添加参数。
  其实也可以跟GET请求一下,用一个字典来存放你需要提交的数据。同样用上面的例子,也可以这样做改成POST请求来处理:importrequestsurlhttps:www。baidu。comparams{pageNum:5,pageSize:10}responserequests。post(url,dataparams)print(完整请求地址:{0}。format(response。url))
  注意:跟GET请求不同的是,POST请求的参数名为data而不是params,虽然他们可以都是字典。
  在这种需要提交表单的链接中,很多的还会采用Json来传输数据,Json是一种轻量级的数据交换格式。而且在前后端分离的系统中,多数也是用Json作为数据交换方式。Requests也是支持json数据作为参数提交请求,如下所示:importrequests需要导入json模块importjsonurlhttps:www。baidu。comdata{pageNum:5,pageSize:10}jsonjson。dumps(data)responserequests。post(url,jsonjson)
  json模块提供了Pyhon字典对象和Json对象的转换方法,我们可以直接使用json。dumps()方法来转换对象。我们也可以直接创建一个json对象。importrequests需要导入json模块importjsonurlhttps:www。baidu。comdata{pageNum:5,pageSize:10}responserequests。post(url,jsondata)
  上面我们手动创建的对象跟上之前的json。dumps(data)得到的结果是一样的,感兴趣的读者可以试一下。在数据获取中,多数情况我们获取得到的是Json对象,需要将其转换成Python对象来使用。优化请求头
  在前面提到一个用来告诉服务器访问者身份的参数UserAgent,这就是Request请求头中的一个参数。在上面所有的例子,我们并没有设置一个请求头,也没有UserAgent也是可以正常访问的。这是因为百度并没有对请求头做限制,如果在其他的网站中没有UserAgent,服务器会认为这些请求是机器人发送的,为了保护自身的服务器安全,减少服务器压力,会拒绝继续响应这些请求,并且返回一些非正常请求的提示。
  我们换一个网站,请求一下豆瓣电影看看会得到什么结果。爬取豆瓣电影首页的信息importrequestsurlhttps:movie。douban。comresponserequests。get(url)输出响应状态码print(状态码:{0}。format(response。statuscode))输出响应文本内容print(响应文本:{0}。format(response。text))输出结果如下:状态码:418响应文本:
  这就是因为豆瓣电影的服务器认为当前请求不是正常的浏览器请求,所以拒绝响应。那怎么让服务器做出正确的响应呢,给requests。get()方法上加上请求头。我们可以模拟一个正常的浏览器,那浏览器的UserAgent是啥呢?
  这个很好看。以谷歌浏览器为例子,先在浏览器打开豆瓣电影首页(https:movie。douban。com),然后按F12,找到NetWork栏目,在按下F5刷新下,这时候浏览器会加载这一次访问的所有内容,我们找到Name值为movie。douban。com的请求,点开会发现后面是这次请求的详情,如图所示。
  其中在RequestHeaders中的最后一个keyvalue就是我们要找的UserAgent,如图中所示,它的值是Mozilla5。0(WindowsNT10。0;Win64;x64;rv:85。0)Gecko20100101Firefox85。0
  这一串的内容意思说这是来自安装64位的win10的85版本的火狐浏览器发出的请求。所以网站服务器才给出了正确的响应。只要我们把这一串内容加到Requests的请求上,那就可以得到正确的回应。
  代码如下:爬取豆瓣电影首页的信息importrequestsurlhttps:movie。douban。com设置请求头headers{useragent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome87。0。4280。88Safari537。36}添加headers参数responserequests。get(url,headersheaders)输出响应状态码print(状态码:{0}。format(response。statuscode))输出响应文本内容print(响应文本:{0}。format(response。text))
  现在我们重新run一下,看下是否能得到我们想要的结果。状态码:200响应文本:!DOCTYPEhtmlhtmllangzhCNclassuawindowsuawebkitheadmetahttpequivContentTypecontenttexthtml;charsetutf8metanamerenderercontentwebkitmetanamereferrercontentalwaysmetanamegooglesiteverificationcontentok0wCgT20tBBgo9zat2iAcimtN4Ftf5ccsh092Xeywtitle豆瓣电影title
  这样添加请求头useragent,服务器认为这次请求不是非法请求,做出了正确回应,得到了我们想要的结果。除了useragent,在RequestHeaders中还有一些比较重要的参数,比如说Cookie,Cookie是由服务器产生,发送给UserAgent,浏览器会将Cookie的keyvalue缓存起来,下次请求同一网站将会在RequestHeaders携带Cookie访问服务器,以此来保持回话。Cookie也是在爬虫编写中一个很重要的参数,后面遇到的时候会详细说明。分析响应内容
  在前面的操作中,我们已经遇见了两种状态码,200的状态码表示当前请求是正常响应的。不过这并不是判断是否得到我们想要的内容的判断标准,更主要的是看响应的内容。有时候还会需要响应头的一些内容,响应头怎么查看呢,直接使用response。headers既可以查看:打印响应头print(response。headers)输出结果:{Date:Sun,07Feb202115:54:36GMT,ContentType:texthtml;charsetutf8,TransferEncoding:chunked,Connection:keepalive,KeepAlive:timeout30,Vary:AcceptEncoding,AcceptEncoding,XXssProtection:1;modeblock,XDoubanMobileapp:0,Expires:Sun,1Jan200601:00:00GMT,Pragma:nocache,CacheControl:mustrevalidate,nocache,private,SetCookie:ll108296;path;domain。douban。com;expiresMon,07Feb202215:54:36GMT,bidsinsxKkZRR4;ExpiresMon,07Feb2215:54:36GMT;Domain。douban。com;Path,XDAEApp:movie,XDAEInstance:default,XDOUBANNEWBID:sinsxKkZRR4,Server:dae,XContentTypeOptions:nosniff,ContentEncoding:gzip}
  响应headers也是一个字典格式的数据,通过字典的访问即可获取值,比如:打印响应头XContentTypeOptions的值print(response。headers〔XContentTypeOptions〕)输出结果:nosniff
  不过更多的内容还是需要在响应体中,就是上面response。text的内容。有时候不同网站的服务器可能会有很多的拦截验证,返回的内容可能并不是真正想要的内容,这时候我们跟浏览器中的页面内容比对一下,确认是不是获得了正确的响应。
  比较简单的方法是,在浏览器中,右键页面,点击查看页面源代码,如果跟response。text的内容基本一样的话,说明我们的请求没问题的,接下来的工作就是解析获得到的内容,它的类型是str对象,内容就是HTML页面的代码。
  在解析HTML之前,先简单的了解一下HTML的知识,这样会提高我们后面的数据采集和收集速度,下一节我们一起学习下HTML基本内容

节日营销攻略在手!万圣节不爆单,难道等到过年吗?正所谓,无节日,不电商。不管是国内电商还是跨境电商的爆单旺季都离不开节日的加持。都说跨境电商是外贸插上了梦想的翅膀,自带互联网的基因,前一秒还在对于拼多多踏入跨境电商乐此不疲地讨论快节奏生活,我们丢了什么?一写在前面的话,这篇文章是本人所见所想而写,仅代表个人看法。如有冒犯请见谅。因为是随笔,想到什么就写写所以会比较乱。万能的分割线焦虑,压力。是现在这个快节奏生活产生的后遗症。看到网上党群联谊社区运动会让居民嗨起来大众网海报新闻记者栾雪通讯员张庆贤潍坊报道9月29日上午,2022诸城市社区运动会在市体育馆健身广场一片欢声笑语中拉开帷幕。本届社区运动会由潍坊市体育彩票中心诸城市体育事业发展中心巢马城际铁路江北段今天正式开建记者从中国铁路上海局集团有限公司获悉,10月1日,经过精心筹备,设计时速350公里的巢马城际铁路江北段正式开工建设。巢马城际铁路是一条连接合肥市(巢湖市)与马鞍山市的高速铁路,是国倪夏莲又赢了倪夏莲这个奶奶级的运动员,五十九岁依然活跃在乒乓球赛场上,而且还屡创佳绩令人钦佩!倪夏莲先是在与韩国队的比赛中战胜韩国一姐田志希,在昨天对泰国队的比赛中又出任一单,助卢森堡队31取国乒大获全胜!马龙完成逆转,梁靖崑首战告捷,林高远横扫削球手2022年10月2日,成都世乒赛继续进行,国乒男团取得小组赛二连胜,连赢波多黎各队美国队,教练组安排樊振东王楚钦轮休,梁靖崑林高远30战胜各自对手,马龙丢掉一局。国乒教练组调整阵容2170万,再见勇士!老毛病又犯了,金州有心培养,你已经没有退路早些时候,在已经结束的一场NBA季前赛中,勇士以10495战胜了奇才,卫冕冠军的这次日本之旅完美收官,对于奇才前锋八村塁来讲,在自己的主场连输两场,确实不是什么光彩的事情。而站在勇质疑李梦合影站c位的,请你们注意一个常识2022年女子篮球世界杯于10月1日落下帷幕,中国女篮获得亚军,时隔二十八年再次问鼎三强,可喜可贺,韩旭拿下最佳一阵,李月汝进入最佳二阵,主教练郑薇指导则逆袭获得最佳主教练,要知道解读现实的本质当我们不观看时,万物就不存在吗?我们生活在现实世界,这是大多数人的共识。但到底什么是现实?我们生活的现实世界是真实的吗?在量子力学出现之前,很少会有人怀疑我们现实世界的真实性,毕竟每当我们睁开眼,都能感受到如此真三星GalaxyTabA8欧洲版开始推送安卓12OneUI4。1IT之家10月2日消息,三星去年推出了经济型平板电脑GalaxyTabA8,预装了基于Android11的OneUI3系统,现在三星GalaxyTabA8LTE版本在欧洲地区开始推一夜蒸发1165亿,坑惨中国黄牛后,苹果特权正在消亡文金错刀频道苹果手机不香了?iPhone14或成史上销量最差机型的话题冲上热搜。连乔布斯的女儿都吐槽iPhone14毫无新意,用两件相同的条纹衬衫暗讽苹果。有黄牛挥泪大甩卖,倒贴1
简单应对秋燥困扰,万物皆可凉白开霜降是秋季的最后一个节气,秋末入冬冷空气逐渐活跃起来,吹的多是更为干冷的偏北风,通常会越吹越干正式进入冬季之时,人体已经适应了干燥的环境,所以燥的感觉并没有秋末明显,但不知不觉间,健康科普洗澡禁忌要记清洗澡禁忌要记清西安交通大学医学院第一附属医院脑血管病防治中心教授白羽在接受记者采访时说,老年人自己也要注意合理的膳食结构,要想长期维持自己的生活自理能力,必须加强身体的锻炼,增强自安翰科技立冬后胃疾病多发,磁控胶囊胃镜助您舒适查胃孝经纬曰斗指乾,为立冬,冬者,终也,万物皆收藏也。又有老话说得妙,冬至吃饺子,不冻耳朵。让我们跟着本草纲目学菜谱,把养胃的好食材藏进饺子里,温暖了胃部,便能暖遍全身!第一道白菜猪肉入冬吃苦,来年不苦,建议少吃苦瓜,多吃4苦,舒服过冬立冬节气到来,意味着正式入冬了。老话常言,入冬吃苦,来年不苦,说的是入冬后,要多吃些苦味食物,这背后有什么讲究呢?这是因为在传统观点里,冬季肾经旺盛,肾主咸,心主苦,肾水克心火,多黄痰是热,干咳是燥,白痰是寒,3个中成药,清热散寒,润燥止咳嗓子有痰,黏黏腻腻的咯在喉咙处,还总是吐不完,有些人咳出来的是黄痰,有些人呢咳出来的是白痰,还比较稀还有些人呢总是干咳,没有痰。这是为什么呢?今天屈医生就从痰的颜色来给你讲清楚,并小羊入草原,内蒙古女篮出现两个有意味的变化先讨论一个问题杨舒予的篮球才华,会不会超过姐姐杨力维?从技术上来说,杨力维的穿插策应见缝插针善于抓住细微空档的能力,以及脚下速度反应,不但在国内,就算放到国际上,也是出类拔萃的。从14惨败纽卡ampampamp英超倒三!官方南安普顿主帅哈森许特尔下课直播吧11月7日讯官方消息,南安普顿主帅哈森许特尔下课。南安普顿官方表示,一线队教练鲁本塞莱斯将临时带队,出战周三的比赛。俱乐部将适时宣布新的正式主帅。昨天晚上,南安普顿主场14惨C罗怒了!连续4场首发,仅战弱旅刷1球,心急死球抱摔对手染黄在闹得沸沸扬扬的拒绝替补登场被罚禁赛停训之后,C罗最终还是大获全胜,在多方的协调之下,腾哈赫也只能做出让步,将状态和实力水准完全不配首发的C罗强行提上首发!北京时间2022年11月命中率2823,这是湖人头号战犯,浓眉球权少威少暗指主帅无能?很多球迷一觉醒来打开手机发现湖人又输了,输给东部现在的顶级强队骑士并不丢人,毕竟骑士打到现在只输了一场比赛,不过输球的方式却令球迷难以接受,湖人在上半场其实打得非常好,但到了下半场冲刺双十一,美团游戏化营销新思路又是一年双11,大促之战已经打响,各大平台和品牌纷纷开始用营销游戏抢人。淘宝的喵糖总动员京东的穿行寻宝记,各品牌旗舰店的签到小游戏,均是通过每日打卡浏览商品参与AR游戏等互动玩法,有个中国桌游团队把吃鸡游戏完美移植到了桌面上最近,一款在KS上结束众筹的桌游blacksite刚刚开始全球发货。这款桌游你在国内几乎上查不到任何信息,甚至连集石都没有收录,但它却是一款地地道道的国产原创桌游。它的设计团队叫沙
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网