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

Python爬虫之Request库的使用

  requests
  就有了更为强大的库requests,有了它,Cookies、登录验证、代理设置等操作都不是事儿。
  安装环境pipinstallrequests
  官方地址:https:requests。readthedocs。ioenlatest
  1。示例引入
  urllib库中的urlopen方法实际上是以GET方式请求网页,而requests中相应的方法就是get方法,是不是感觉表达更明确一些?下面通过实例来看一下:importrequestsrrequests。get(https:www。baidu。com)print(type(r))print(r。statuscode)print(type(r。text))print(r。text)print(r。cookies)
  测试实例:rrequests。post(http:httpbin。orgpost)rrequests。put(http:httpbin。orgput)rrequests。delete(http:httpbin。orgdelete)rrequests。head(http:httpbin。orgget)rrequests。options(http:httpbin。orgget)
  2、GET抓取importrequestsdata{name:germey,age:22}rrequests。get(http:httpbin。orgget,paramsdata)print(r。text)
  2。1抓取二进制数据
  下面以图片为例来看一下:importrequestsrrequests。get(http:qwmxpxq5y。hnbkt。clouddn。comhh。png)print(r。text)print(r。content)
  如果不传递headers,就不能正常请求:importrequestsrrequests。get(https:mmzztt。com)print(r。text)
  但如果加上headers并加上UserAgent信息,那就没问题了:importrequestsheaders{UserAgent:Mozilla5。0(Macintosh;IntelMacOSX10114)AppleWebKit537。36(KHTML,likeGecko)Chrome52。0。2743。116Safari537。36}rrequests。get(https:mmzztt。com,headersheaders)print(r。text)
  3、POST请求
  3。1前面我们了解了最基本的GET请求,另外一种比较常见的请求方式是POST。使用requests实现POST请求同样非常简单,示例如下:importrequestsdata{name:germey,age:22}rrequests。post(http:httpbin。orgpost,datadata)print(r。text)
  测试网站
  巨潮网络数据点击资讯选择公开信息importrequestsurlhttp:www。cninfo。com。cndata20intsstatisticsresrequests。post(url)print(res。text)
  3。2发送请求后,得到的自然就是响应。在上面的实例中,我们使用text和content获取了响应的内容。此外,还有很多属性和方法可以用来获取其他信息,比如状态码、响应头、Cookies等。示例如下:importrequestsheaders{UserAgent:Mozilla5。0(Macintosh;IntelMacOSX10114)AppleWebKit537。36(KHTML,likeGecko)Chrome52。0。2743。116Safari537。36}rrequests。get(http:www。jianshu。com,headersheaders)print(type(r。statuscode),r。statuscode)print(type(r。headers),r。headers)print(type(r。cookies),r。cookies)print(type(r。url),r。url)print(type(r。history),r。history)
  3。3状态码常用来判断请求是否成功,而requests还提供了一个内置的状态码查询对象requests。codes,示例如下:importrequestsheaders{UserAgent:Mozilla5。0(Macintosh;IntelMacOSX10114)AppleWebKit537。36(KHTML,likeGecko)Chrome52。0。2743。116Safari537。36}rrequests。get(http:www。jianshu。com,headersheaders)ifnotr。statuscoderequests。codes。ok:exit()else:print(RequestSuccessfully)
  3。4那么,肯定不能只有ok这个条件码。下面列出了返回码和相应的查询条件:信息性状态码100:(continue,),101:(switchingprotocols,),102:(processing,),103:(checkpoint,),122:(uritoolong,requesturitoolong),成功状态码200:(ok,okay,allok,allokay,allgood,o,),201:(created,),202:(accepted,),203:(nonauthoritativeinfo,nonauthoritativeinformation),204:(nocontent,),205:(resetcontent,reset),206:(partialcontent,partial),207:(multistatus,multiplestatus,multistati,multiplestati),208:(alreadyreported,),226:(imused,),重定向状态码300:(multiplechoices,),301:(movedpermanently,moved,o),302:(found,),303:(seeother,other),304:(notmodified,),305:(useproxy,),306:(switchproxy,),307:(temporaryredirect,temporarymoved,temporary),308:(permanentredirect,resumeincomplete,resume,),These2toberemovedin3。0客户端错误状态码400:(badrequest,bad),401:(unauthorized,),402:(paymentrequired,payment),403:(forbidden,),404:(notfound,o),405:(methodnotallowed,notallowed),406:(notacceptable,),407:(proxyauthenticationrequired,proxyauth,proxyauthentication),408:(requesttimeout,timeout),409:(conflict,),410:(gone,),411:(lengthrequired,),412:(preconditionfailed,precondition),413:(requestentitytoolarge,),414:(requesturitoolarge,),415:(unsupportedmediatype,unsupportedmedia,mediatype),416:(requestedrangenotsatisfiable,requestedrange,rangenotsatisfiable),417:(expectationfailed,),418:(imateapot,teapot,iamateapot),421:(misdirectedrequest,),422:(unprocessableentity,unprocessable),423:(locked,),424:(faileddependency,dependency),425:(unorderedcollection,unordered),426:(upgraderequired,upgrade),428:(preconditionrequired,precondition),429:(toomanyrequests,toomany),431:(headerfieldstoolarge,fieldstoolarge),444:(noresponse,none),449:(retrywith,retry),450:(blockedbywindowsparentalcontrols,parentalcontrols),451:(unavailableforlegalreasons,legalreasons),499:(clientclosedrequest,),服务端错误状态码500:(internalservererror,servererror,o,),501:(notimplemented,),502:(badgateway,),503:(serviceunavailable,unavailable),504:(gatewaytimeout,),505:(httpversionnotsupported,httpversion),506:(variantalsonegotiates,),507:(insufficientstorage,),509:(bandwidthlimitexceeded,bandwidth),510:(notextended,),511:(networkauthenticationrequired,networkauth,networkauthentication)
  4、高级用法
  1、代理添加proxy{http:http:183。162。171。78:4216,}返回当前IPresrequests。get(http:httpbin。orgip,proxiesproxy)print(res。text)
  2、快代理IP使用
  文献:https:www。kuaidaili。comdocdevquickstart
  打开后,默认http协议,返回格式选json,我的订单是VIP订单,所以稳定性选稳定,返回格式选json,然后点击生成链接,下面的API链接直接复制上。
  3。关闭警告fromrequests。packagesimporturllib3urllib3。disablewarnings()
  爬虫流程
  5、初级爬虫importrequestsfromlxmlimportetreedefmain():1。定义页面URL和解析规则crawlurls〔https:36kr。comp1328468833360133,https:36kr。comp1328528129988866,https:36kr。comp1328512085344642〕parseruleh1〔contains(class,articletitlemarginbottom20commonwidth)〕text()forurlincrawlurls:2。发起HTTP请求responserequests。get(url)3。解析HTMLresultetree。HTML(response。text)。xpath(parserule)〔0〕4。保存结果print(result)ifnamemain:main()
  6、全站采集
  6。1封装公共文件
  创建utils文件夹,写一个base类供其他程序调用importrequestsfromretryingimportretryfromrequests。packages。urllib3。exceptionsimportInsecureRequestWarningrequests。packages。urllib3。disablewarnings(InsecureRequestWarning)fromlxmlimportetreeimportrandom,timeclassFakeChromeUA:firstnumrandom。randint(55,62)thirdnumrandom。randint(0,3200)fourthnumrandom。randint(0,140)ostype〔(WindowsNT6。1;WOW64),(WindowsNT10。0;WOW64),(X11;Linuxx8664),(Macintosh;IntelMacOSX10126)〕chromeversionChrome{}。0。{}。{}。format(firstnum,thirdnum,fourthnum)classmethoddefgetua(cls):return。join(〔Mozilla5。0,random。choice(cls。ostype),AppleWebKit537。36,(KHTML,likeGecko),cls。chromeversion,Safari537。36〕)classSpiders(FakeChromeUA):urls〔〕retry(stopmaxattemptnumber3,waitfixed2000)deffetch(self,url,paramNone,headersNone):try:ifnotheaders:headers{}headers〔useragent〕self。getua()else:headers〔useragent〕self。getua()self。waitsometime()responserequests。get(url,paramsparam,headersheaders)ifresponse。statuscode200:response。encodingutf8returnresponseexceptrequests。ConnectionError:returndefwaitsometime(self):time。sleep(random。randint(100,300)1000)
  6。2案例实践fromurllib。parseimporturljoinimportrequestsfromlxmlimportetreefromqueueimportQueuefromxl。baseimportSpidersfrompymongoimportMongoClientfltlambdax:x〔0〕ifxelseNoneclassCrawl(Spiders):baseurlhttps:36kr。com种子URLstarturlhttps:36kr。cominformationtechnology解析规则rules{文章列表listurls:p〔classarticleitempicwrapper〕ahref,详情页数据detailurls:p〔classcommonwidthmarginbottom20〕text(),标题title:h1〔classarticletitlemarginbottom20commonwidth〕text(),}定义队列listqueueQueue()defcrawl(self,url):首页responseself。fetch(url)listurlsetree。HTML(response。text)。xpath(self。rules〔listurls〕)print(urljoin(self。baseurl,listurls))forlisturlinlisturls:print(urljoin(self。baseurl,listurl))获取url列表信息self。listqueue。put(urljoin(self。baseurl,listurl))deflistloop(self):采集列表页whileTrue:listurlself。listqueue。get()print(self。listqueue。qsize())self。crawldetail(listurl)如果队列为空退出程序ifself。listqueue。empty():breakdefcrawldetail(self,url):详情页responseself。fetch(url)htmletree。HTML(response。text)contenthtml。xpath(self。rules〔detailurls〕)titleflt(html。xpath(self。rules〔title〕))print(title)data{content:content,title:title}self。savemongo(data)defsavemongo(self,data):clientMongoClient()建立连接colclient〔python〕〔hh〕ifisinstance(data,dict):rescol。insertone(data)returnreselse:return单条数据必须是这种格式:{name:age},你传入的是stype(data)defmain(self):1。标签页self。crawl(self。starturl)self。listloop()ifnamemain:sCrawl()s。main()
  文件操作标识
  requestscachepipinstallrequestscache
  在做爬虫的时候,我们往往可能这些情况:
  网站比较复杂,会碰到很多重复请求。
  有时候爬虫意外中断了,但我们没有保存爬取状态,再次运行就需要重新爬取。
  测试样例对比importrequestsimporttimestarttime。time()sessionrequests。Session()foriinrange(10):session。get(http:httpbin。orgdelay1)print(fFinished{i1}requests)endtime。time()print(Costtime,endstart)
  测试样例对比2importrequestscacheimporttimestarttime。time()sessionrequestscache。CachedSession(democache)foriinrange(10):session。get(http:httpbin。orgdelay1)print(fFinished{i1}requests)endtime。time()print(Costtime,endstart)
  但是,刚才我们在写的时候把requests的session对象直接替换了。有没有别的写法呢?比如我不影响当前代码,只在代码前面加几行初始化代码就完成requestscache的配置呢?importtimeimportrequestsimportrequestscacherequestscache。installcache(democache)starttime。time()sessionrequests。Session()foriinrange(10):session。get(http:httpbin。orgdelay1)print(fFinished{i1}requests)endtime。time()print(Costtime,endstart)
  这次我们直接调用了requestscache库的installcache方法就好了,其他的requests的Session照常使用即可。
  刚才我们知道了,requestscache默认使用了SQLite作为缓存对象,那这个能不能换啊?比如用文件,或者其他的数据库呢?
  自然是可以的。
  比如我们可以把后端换成本地文件,那可以这么做:requestscache。installcache(democache,backendfilesystem)
  如果不想生产文件,可以指定系统缓存文件requestscache。installcache(democache,backendfilesystem,usecachedirTrue)
  另外除了文件系统,requestscache也支持其他的后端,比如Redis、MongoDB、GridFS甚至内存,但也需要对应的依赖库支持,具体可以参见下表:
  Backend
  Class
  Alias
  Dependencies
  SQLite
  SQLiteCache
  sqlite
  Redis
  RedisCache
  redis
  redispy
  MongoDB
  MongoCache
  mongodb
  pymongo
  GridFS
  GridFSCache
  gridfs
  pymongo
  DynamoDB
  DynamoDbCache
  dynamodb
  boto3
  Filesystem
  FileCache
  filesystem
  Memory
  BaseCache
  memory
  比如使用Redis就可以改写如下:backendrequestscache。RedisCache(hostlocalhost,port6379)requestscache。installcache(democache,backendbackend)
  更多详细配置可以参考官方文档:https:requestscache。readthedocs。ioenstableuserguidebackends。htmlbackends
  当然,我们有时候也想指定有些请求不缓存,比如只缓存POST请求,不缓存GET请求,那可以这样来配置:importtimeimportrequestsimportrequestscacherequestscache。installcache(democache2,allowablemethods〔POST〕)starttime。time()sessionrequests。Session()foriinrange(10):session。get(http:httpbin。orgdelay1)print(fFinished{i1}requests)endtime。time()print(Costtimeforget,endstart)starttime。time()foriinrange(10):session。post(http:httpbin。orgdelay1)print(fFinished{i1}requests)endtime。time()print(Costtimeforpost,endstart)
  当然我们还可以匹配URL,比如针对哪种Pattern的URL缓存多久,则可以这样写:urlsexpireafter{。site1。com:30,site2。comstatic:1}requestscache。installcache(democache2,urlsexpireafterurlsexpireafter)
  好了,到现在为止,一些基本配置、过期时间配置、后端配置、过滤器配置等基本常见的用法就介绍到这里啦,更多详细的用法大家可以参考官方文档:https:requestscache。readthedocs。ioenstableuserguide。html。

七夕会摄影初识黑洞这幅作品的创作灵感来源于科教电影。在看关于宇宙的科教片时,我就在思考如何利用生活中的食品原料,用静物摄影方法来拍摄与宇宙相关的照片。这个念头一直在我的脑海中浮现。不久前,在什么是ChatGPT?至少有10种用途ChatGPT是一种基于自然语言处理技术的聊天机器人,它可以模拟人类的对话,并根据用户输入的文本进行回复。它由OpenAI开发,是当前最先进的自然语言处理技术之一。ChatGPT可提前还贷,能省多少?随着楼市的变化,提前还贷的人越来越多,甚至为此排起了长队。选择提前还款当然是为了降低利息支出,但专家提醒,提前还贷不能盲目跟风。提前还贷潮下还贷难2月1日零点,来自江苏徐州的90后多省明确试点现房销售新房即买即交付或加速落地自今年1月17日召开的全国住房和城乡建设工作会议提出有条件的可以进行现房销售后,证券日报记者梳理发现,不足一个月时间,已有山东安徽河南四川广东等地明确表态,试点现房销售。接受证券日费加罗报反养老金改革罢工继续干扰法国交通但势头减弱大不如前中国小康网02月15日讯老马由于反对养老金改革的社会运动,五分之一的TGV(高铁)和二分之一的TER(城际轨道)将于2月16日星期四取消。法国交通系统反养老金改革罢工进入第五天法国让自己保持优秀的5个习惯树立有意义的目标比起着急赶路,更重要的是先做好充足的准备,制定好缜密的计划。一个目标清晰的人,在前进的路上往往不会迷失方向。试试给自己设定一个有意义且实际的目标吧。找准目标,踏踏实又见小黑盒!Inteli513490Fampampampi713790F首发评测在12代CoreAlderLake时,Intel曾为国内市场推出了一款专供的CPUCorei512490F,官方售价和12400F一模一样,但是频率更高缓存更大,自然性能更好,算是2023。02。14iPhone今日限免App如果您看到此篇文章时已经错过限免也没关系,很多软件会定期限免。您可以关注科技那些事每天为你带来最新iOS限时免费信息,欢迎关注订阅闲逛祝朋友们情人节快乐BlurPhotoBlurP超龄家电应定期进行安全检查生活中,你是否关注过家用电器的保质期呢?超期服役的家用电器不仅在功效上大打折扣,还会给消费者的安全健康带来隐患。为引导消费者增强安全意识,形成绿色环保可持续的消费理念,近日,山东省世上再无安塔基亚地震摧毁了一座城市,一种文明在安塔基亚,难民们正努力在城市的任何一个角落寻找可以休息的地方在没有灯光的街角长满草的小公园一所小学旁边,或是在世界上最早的基督教教堂之一的山坡上。地震后的土耳其哈塔伊省安塔基亚市警校情怀(2)由于时代的变革,本世纪初大连市人民警察学校完成了她光荣的历史使命,我被组织上安排到大连市公安局教育训练处担任专职警务实战教官,教学重点也由学历教育转变为职业培训,需要我尽快完成由一
NBA常规赛篮网vs快船请双方禁用英雄NBA常规赛,篮网11095胜快船开局双方开启征召模式,双方各禁一名英雄,篮网禁欧文,快船禁小卡,一个打不了,另一个一个不能打。蔡崇信表示脑瓜子嗡嗡响,我知道欧文打球很厉害,但欧文招商证券双十一呈现较强消费韧性,综合电商增速放缓,直播电商表现亮眼招商证券11月13日发布研究报告称,2022年双十一收官,全网电商交易额达11507亿元(同比13。43),整体销售增长稳健,呈现较强的消费韧性综合电商增速放缓(同比2。9)直播电波特我必须保护好球,我必须带领球队NBA常规赛,鹈鹕117106击败火箭。火箭球员波特全场出战32分钟,投篮16中9,三分9中3,罚球4中2,得到23分1篮板3助攻。我必须保护好球,我必须带领球队,确保队友们处在正篮网掀翻快船!库兹马杀疯干翻西部第一今天NBA常规赛迎来一场焦点对决,快船坐镇主场迎来篮网的挑战,快船近期取得两连胜竞技状态有所回暖。而篮网则是在更换主教练以及欧文被禁赛之后,彻底的改头换面,他们在过去的四场比赛中取2022赛季F1电竞中国冠军赛收官,电竞IP助力体育消费11月12日晚,2022赛季F1电竞中国冠军赛职业联赛最后一轮在意大利蒙扎赛道圆满收官。全年十二轮职业联赛,十支车队激烈角逐。最终,L。WLG车队力压卫冕冠军TSW车队荣获年度车队小雪穿高跟鞋的职业生活记忆作为一个穿职业装的女孩,自从大学毕业了就应聘到了一家公司上班,大学时期羡慕那些白领丽人,自从自己工作了以后,知道了白领的艰辛付出,我所在的公司不是什么上市公司,不过待遇不错,朝九晚如果预算10w,我会毫不犹豫选择它腕表之家钟表文化如果我说,有一款腕表专为激烈的马球比赛设计,你大概会花上时间想一想。如果我说,这款专为马球比赛设计的腕表具有强烈的装饰艺术风格,以及可翻转表壳,那么不需要再继续往下为什么劝你别穿短裙黑丝出门,看完这些街拍,你就全懂了很多人到现在对于黑丝都非常大的误解,总是觉得它的上身效果非常廉价俗气老土,而且丝毫没有高级感。可是一件单品既然能够一直流行,那么就说明有它存在的意义,黑丝虽然很容易跟艳俗挂钩,但是想要瘦腿怎么办?最近很多求美者们向我反映一个问题,她们说自己既不想辛苦锻炼瘦腿又不想花很多时间p图,可是每次在欣赏自己美照的时候,看到粗壮的小腿,笑容瞬间消失,眉头也紧皱。(图片源自网络)我非常能优秀作文再见,我曾居住的小区河北唐山第十二中学张竞姝涵再见,我曾居住的小区作者张竞姝涵早晨,温暖的阳光从窗缝中渗透了进来,照在房间的实木地板上。起床后,阳光照射在我身上,暖洋洋的,舒服极了。我想今天的天气这么好,一定会有美好的事发生在湖人VS篮网202214詹姆斯与杜兰特最新数据对比湖人主场116103击败篮网,终结了5连败浓眉25投15中,全场狂砍37分18篮板杜兰特31分9篮板7助攻本场比赛后詹姆斯和杜兰特的最新数据对比詹姆斯与杜兰特数据对比詹姆斯杜兰特差
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网