版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
林天宇用Python3学习编写网络爬虫
(之一:入门实践)作者:林天宇一、写在前面1、 本文适应的读者范围会一点点Python的基本语法;已经安装好了Python3和PyCharm;•网络爬虫新手2、 本文所使用的开发环境Macpro/iOSPython3PyCharm3、 本文不纠结以下内容为什么选择Python3而不是Python2?答:没什么特别原因,个人喜好。如何安装Pyhon3?请查阅其他文档。PyCharm是什么?为什么不用其他工具。一个常用的Python开发工具,个人喜欢,可参阅其他文档。如果你不喜欢,你也可以用其他工具编码和调试。二、快速开始东北人有句话说:能动手,尽量不瞎叨叨。少些废话,快速开干。1、新建项目和文件启动PyCharm,"CreateNewProject”。因为估计不需要到特别的框架,所以类型就默认地选择了“PurePython",名字就起成■了“WebSpider”(我瞎命名的,就是觉得Spider比较帅气而已),然后“Create”如下图:新建一个Python文件,命名为SpiderOOl,毕竟也是我的第一只小爬虫嘛。WebSpider)Project▼ ©4s此WebSpider**/PycharmProjects/WebSpIderNewFileDirectoryPythonPackage#PythonFile区】JupyterNotebookMHTMLFile勤StylesheetJavaScriptFileTSTypeScriptFile第CcffeeScriptFileLJGherkinfeaturefileEditFileTemplates...DataSource• • NewPythonfileName: Spider00l| TIKind: [j^Pythonfile QOKCancelOKOK,到目前为止,已经新建一个名字叫做Spider001的Python空白文件了。可以在项目等资源管理器中看到WebSpider项目下面,有一个
Sider001.py的文件。我们接下来就对这个Sider001.py文件进行编辑和测试。2、第一爬先写代码,感受一下效果,找找成就感,然后再详细分析和思考。代码如下:importurllib.requesturl=""data=urllib.request.urlopen(url).read()data=data.decode('UTF-8')print(data)然后,Run,选择Spider001.py,运行结果如下:RumSpiderOOl/Library/Franieworks/Python.framework/Versions/3.5/bin/python3>5/Dsers/lintian<JDOCTYPEhtmIxhtmIxheadxmetahttp-equiv^Mcontent-type"content="text/html;ProcessfinishedwithexitcodeG由上图可以见,运行正常,而且已经将百度的HTML代码获取到了(见运行窗口的第二行HTML代码)。百度心想,我也不知道倒了什么霉,你们爬虫测试的HelloWorld都喜欢拿我测试,无谓增加我压力。那我们再回头来详细看看刚才的代码:#首先引入urllib库的request子库importurllib.request#接着定义一个我们要爬取的变量叫url#然后将我们要爬去的网址字符串值赋给url#可怜的百度。url=""#定义一个data变量,用来获取爬过来的字符串#下面是urllib的吧啦吧啦的用法,没什么好解释的。#它就是这么用的,记住就好了。#其中url是变量。data=urllib.request.urlopen(url).read()#编码,改变编码。decode方法。data=data.decode('UTF-8')#print打印出来结果。print(data)#程序结束我们可以得出以下几点初学者的心得:•用到一个urllib的库。Urllib库及其子库的用法,官方文档如下:https://docs.python.Org/3/library/urllib.html•其获取url其内容的方法为:urllib.request.urlopen(url地址).read()•将字符串本身使用decode(编码类型’)的方法后,可以重新编码3、美女图片!美女图片!!都说美女是推动社会发展的重要因素,对美女的追求,也是推动我们宅男技术水平的重要因素。当年在学校机房里用486电脑DOS环境下,冒着被机房老师抓住的生命危险偷偷看舒淇的图片,确实对我当年的技术水平提升很大。第一爬的过程中,只爬了一串HTML源代码,似乎新鲜劲很快就过去了,真正我们要爬的,是美女图美女图啊!网站美女图片站众多,我本想选择我最喜欢的BeautyLeg作为测试的网站,但是很遗憾,可能这个网站的服务器在其他地区,网络速度很慢,图片质量又高,所以每次运行时间都会比较长,不太适合我们前期作为边调试边学习用。所以暂时放弃,不过,美腿们,不要着急,我调试好后,再来爬去你们。不要着急,等我。
噩洒促包回回I血 虹户卷KJMn 新SI噩洒促包回回I血 虹户卷KJMn 新SI喜真昵WK 葬集掌特免9站沼磅告刖MlinBuuE・IM抑既It提亓至4OWiX4(B6商隹段保置,HD蹈井斤窿冬疏0队酒卷恸-买望黑*»1• H赛心药旬付*幔W.本站人力础,4Mt*t怦月所机出之陆堆亚fll町,借死耳警甘.fflft—R蜜、辞岫Da\nClusNa.Mwk]削EiimNo.lO?Vicnl皿皤MMK片No23l.—CW-]<5斯MJt—(W-Lfiftn£.片福.泌j0I:时%在此情况下,我随便百度了一个“美女图库”网站。真是百度的,一点广告费都没给的,美女图库。威迎增来且Mhf131美女图片网津站永民域名hnpi/Vwnw.mm】3]jcoe热门搠热门搠|iw性醯美女清纯美眉美女校花性感车模膑枪美女婀星写真麻辣教官刘娅希与小猎物的激情碰撞3G命天后冰螺丰乳巨胃火藕肉体诱 #济室散女凯竹故情臼矢伴Itt陈EM'福博英人王明简服勾引携眼卸熟腐38M女祚喑尼衡耻帼郭pki理t区切人瞬学蚌I肄居家情貌都性娇瑁连 宅男女神杨信度箜林制服诱密上足眼笑女李宝宝秀丰料肥悴翻遂人 次怕挤兢凯竹情建单衣阳臼宿苜弄要『映美人盼酷小背心尴掩巨株戳乳 性!》步妇芝芝真空上波比基尼檬身这个网站也是典型的“三级”结构的网站。所谓“三级”结构(别想歪了),指的是:网站首页rts合答件栏的•新或■邮栏目一档目二栏目三栏目一档目二栏目三f」详朝图(5?)f」详朝图(5?)内容详细囹{文)内容详细图{冗内容许蛔国(X)内容祥蛔国(*}内容详蜩囹(女)内容—详细囹{炭)内容详细囹{X)内容详蛔囹(X)内容详细图m内容洋垠图(文)内容I详细图【文)内容本栏目内容列表详如困(S)内容详细图ijt)内容详细囹攻)内容详蛔圈(宾)内容;诗蛔图(*}内容许蛔图(文)内宅我们先从最简单的开始,先将目标定在基础,也就是最详细这一级的内容开始爬取。我们先点击网站链接,到达第三级的详细图(文)这一层网页。我们避开了需要登录和收费的会员专区的栏目,选择了“免费下载栏目”进入,具体的网址如下:首页:/栏目页:/mingxing/内容页:/mingxing/2016.html这个网站的内容页是一个图文格式的网页,这一页有一张美女图片,我们从简单的开始,那我们就先将这一页的这张图片爬下来到本地硬盘吧。
我们用鼠标在图片上点右键,获取这张图片的准确名称和地址为:http://img1.mm131.eom/pic/2016/1.jpg从上述地址分析,貌似这个网站的命名还是比较清晰易懂的,能找到规律。也就是说很可能2016是这个明星这个专辑的编号,然后每张图片从1开始依次编号命名。明星专辑的编号是2016,也很可能明星专辑的编号,也是从1开始依次编号的。(究竟是不是这样,会不会被打脸,后面测试了才知道。)老习惯,先上代码,看效果,找成就感。新建一个新的py文件,命名为GetMM131.pyimporturllib.request#估计后续得重用,所以将其写成一个函数defget_img(url,img_name):print('开始读取图片地址:’+url)img_info=urllib.request.urlopen(url).read()#文件IO操作的办法,语法简单实用,一看就明白,暂时不详细说withopen(img_name,'wb')asfp:fp.write(img_info)print('已下载完毕,保存为文件:’+img_name)return#用the_url和the_img_name分别存储这次测试的下载的文件地址以及要保存称为的文件名the_url="http://img1.mm131.Com/pic/2016/1.jpg"the_img_name="1.jpg"#调用下载图片的函数get_img(the_url,the_img_name)运行效果如下:/Library/Framework5/Python,fraiTew&rk/Ver&ions/3.S/b-5/User&/lintnrPr&jects/WebSpid&r/GetfflL31.py开蛤读亚01片Jtttt: 血口巳下tfi完毕『保存为女样:l.jpgProcessfinis-^edwithexitcode&打开程序文件所在的目录,果真1.jpg美女图已经静静地在文件夹下存在了。4、美女图片0.2版!好的,有点感觉了,但是还是不过瘾,看能否一次性把这个2016编号的美女图片集给全部爬下来。我们点开了下面的分页菜单:一页一页看下去,发现其图片的地址果然为:http://img1.mm131.Com/pic/2016/1.jpghttp://img1.mm131.Com/pic/2016/2.jpghttp://img1.mm131.Com/pic/2016/3.jpg/pic/2016/12.jpg那这就好办了,有规律,用循环来解决。于是我们调整一下程序代码,get_img函数暂时不用变,调整一下调用该函数的方式。于是有了以下的代码:i=1whilei<=12:#因为i的数据类型是int,不能直接变成字符串,所以采用str函数转换了一下page_num=str(i)the_url =
/pic/2016/"+page_num+".jpgthe_img_name=page_num+".jpg"#调用下载图片的函数get_img(the_url,the_img_name)i=i+1编写完毕,运行!运行效果如下:WfltjgpIdBir-GelMMigi.py}知PrqjeGl曹 O知PrqjeGl曹 O丰暮胸WebSpiderTPycharmProjects/^ebSpiderLJpg成讷4词5』闻&榆7.jpgs.ipg@ipg-W.jpg2iijpgI2.jpgGot岫M13l.py^^plderaai.py■IIIIExtemslLibrariesimporturUib.r«^slc2345 •蜓什后雄待BI用|所骤湘凤玲战一个函取defgetting[urlPimg_name]s献拜始该职图茴地既;'+MUjjnjLjjifp=urlljLb4retmes•urloptu<ur114rtadf]9 #友样W■作灿格,语法简单父用,一■腆白,暂时不详Iffl说vithi如蚓4访妃帏怕』.'#?叩mfD,write[img_irifo)print 保谆为文件:请*iirg.naire)irflturini151=1wfiUo!i<=12?=itrfl)-the_iirL="ftttp://imgiL.ranOl-com/pic/2fllfi/,,4page_nun^"-jpg"th—inL简me=pag顷g十",jpg"21 #调用下的茜敝get_uig(theurl^t^Ur^inamel*t+殍Ft+殍F一聘t儿山rarjr/Franeworks/Pythanfr&mework/veirsions/孔 .5/Uwrs/1inKi期同/Pychar"ro-jecti/iRtebSpider/teLMMlJli.py开均if:取两片坷lit:http.:JEinpl・mIMI・仁nm中让,制16/Ljpp已下保存为女件;1.jpg开始读四图片地耻:通已下董完单-保存为文件:2.JM开拍读取图片地睡:iditaE下盘完早.保存为女件厂京7网开始ifBSHI片itfrhl:httcdJFiiral・nnlSl,-an/EiJxF福]・1口口巳下就完早.怀存为文件:如开招速职图片地耻;BttfllZZinM・rtfilML「中,口iW列1计5,i口口已下诋完毕一保存为文件:5.jpg开始读取01片地fel:httw//inol.nnSL31・匚om/口1C/M1&/6・1.口o已下疝完甲,保存对女件;&.[网开拍谯片地皿:htt口:U_Mol.nnl31msti/口1"甜18门,血已下最完毕、保存为文件:7-jpg开招谖职图片地耻;HttE〃inciLnM3;LEm/niWM16y8・ig已下施完学,侃存为文件;B.]pg打指谟取S1片地41:htt口V/1T1Q1.M3L31・c:an/口计9,1叫已下SS5?苹.保存用文件:9.jpg开ifi诺明图片地近:htW/inpLnfaMLcgn/micUHl&FlOrmp已下ti完毕’保存为文件:10.]^开措诿眠图片地毗;httm打jjidl.IW1131/com/uib渊16m.iml已下我完帆保存用文件:ll.jpg打始读耽图片地fit:nttw"Mqnrwijncan加i"拥i"ill1皿已下我元版保存为丈件:i2.iraPracesafinishedvlthexitcadeD貌似一切顺利,怀着激动的心情进入文件夹,果然,12张美女图片都在文件夹里待着了。5、美女图片0.3版似乎总还是感觉缺少点什么,如果我们再把程序做得智能一点点,看是否可以,于是有以下几个想法的改进:•输入为一个个人专辑的编号;•系统自动读取该编号下图片的总数;•系统建立一个为编号等目录,然后把该专辑的图片全部保存到该目录下。于是我们要学习几个技能:1) 、正则表达式:目的是要从HTML字符串里,找到“共XX页”字样,读取XX这个信息。2) 、文件夹操作:目的是如何建立一个文件夹目录,然后将这个图片好存在这个目录里。于是就有了以下的代码:importurllib.requestimportreimportos#函数get_img#功能:获取一个网上的图片,然后保存到本地#参数:url(图片的网址),img_name(图片的名称)defget_img(url,img_name):print('开始读取图片地址:’+url)img_info=urllib.request.urlopen(url).read()#文件IO操作的办法,语法简单实用,一看就明白,暂时不详细说withopen(img_name,'wb')asfp:fp.write(img_info)print('已下载完毕,保存为文件:’+img_name)return#需要爬取的专辑的参数编号this_f_num=305#获取该专辑第一页的页面信息,然后采取正则的方式,获取其中'共多少页”f_html =urllib.request.urlopen('/mingxing/%s.html'%this_f_num).read().decode('gbk')regex=r'共(.*?)页’pa=pile(regex)#由于获取的是一个数组格式,但只有一个数字,于是将其读取出来。iMax=int(re.findall(pa,f_html)[0])#建立一个目录this_f_now=os.getcwd()f_path=this_f_now+"/"+str(this_f_num)+"/"ifos.path.isdir(f_path)二二False:os.mkdir(str(this_f_num))#进入循环下载i=1whilei<=iMax:#因为i的数据类型是int,不能直接变成字符串,所以采用str函数转换了一下page_num=str(i)the_url="/pic/"+str(this_f_num)+"/. ____ _ __ .II■ _II+page_num+.jpgthe_img_name=f_path+page_num+".jpg"#调用下载图片的函数get_img(the_url,the_img_name)i=i+1输入对应的专辑的编号,如“1500,1771,1881”等,依次运行,效果如下:『PraiMX- 日拿尊『PraiMX- 日拿尊-广T■祁&O$gfrTF^ChMlFHDjtC成*如钮祖均►・1衲卜■177113B-1■怕97aH2016■妣■斌土^pidcfbOl.pvIlliEjiEAi^dILi^ariBSr*itaopen',mg_namerwiasrpirp,irfltt[irg_ir>ro>print?-2TK*!*,■»春为衣鼻!!+influimejr*turi网*舸雇足取折wim号Ehbl_r_rtuiftrSfri22 硬职谓专ttlR—再的$点打息.螺咳果取正痢曲方式.找取具中“越黄•城・rjitm『yrUl&Pretjuflrtr^r^peflt1Http=//i».ialTtl■c-hialL^Mhlfr_f_nyipPrrMHJ F■"拥LWH?pa=re.cwnpiljetregex)蹈*闭于ISIS鸣是一个!KWt式,怪R青一个JB.字,于丑:誓演厦面出琏-i^K=iflrl:[rt=findaUtp^if_h1rtUItlF网#点立一个■目陞th虹Tjg・中轧网心口fjiath=this.C^ow+■/"*strtthis.Cwnl1+=7™ifns.pithiisBlirtf_pflUn)=FalM!:a^.Fhdk「lei「fth上七JhijiMI34 ~"*阳5"国Uliwftilti<T相h:明 *fl为工政BmtiLSg.备IfciHtg林虬ffiO^5tr^Brfc?ftJ-TP9?e_nuri=a-trtil1thi_i^rl- MUl.caa/pLc/'*+.打计眦卜■*"7" J时“the_ing_nBnei=f_parith卜paige.nur■+jpg"42 #,胃下5若的圈慰gct_lnglthe^url,the_ing_ftane-JL=i*l44Ru/GecSJMlSi. JTti!膏立RG片规t:httnWif自\』』・皿酎TELTHS^,信弃*立阵:/Uficrb/UncianyuZPych^rrPfejectsA*'cbSpLdcr/3Ei5/4.jpq+开命厦w片址址:imp:〃am.Em.匚就mb3日54」呻信寿为立禅:业舞rsj■壮帜词蜂|川状国r*阡M就用月6X5.jpg:升涸妙阁治桩:httin〃顼叽,mHi,n扁i8口此『3日机角1叫B巳羌#,日畀其±障:/U&ErV^lnilAniAi^PytbfirrPrDJec^AiEbSpider/3B5/G.Jpg开曲翔!B片些*:片E-TK^Si,fi寿为宝停./UEEri/lijjitiBn^u/PycharTPrDjects^rtebSpLder/Mir?.jpn;/开为加HJU雄*.http SmL.e】3L,匚时sHW勺*,Eon* 巳h岷三串,情存.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Day5:基础课堂指令学习 精细化学习计划(人教PEP三年级上册0基础专属)
- 2026四川乐山市沙湾区增量政策性岗位招募26人考前冲刺密卷(全优)附答案详解
- 2026-2027重庆市田家炳中学上期非编教师招聘16人备考题库及完整答案详解(夺冠)
- 2026中卫市海原县年机事业单位助理岗位见习报名模拟试卷含答案详解【黄金题型】
- 2026江西南昌安义县工投商业管理有限公司第二批招聘工作人员1人笔试题库带答案详解(B卷)
- 浙江省宁波市2026届高三上学期高考模拟考试(一模)技术试卷(含答案)
- 2026云南中医药大学招聘非事业编制教辅岗工作人员15人考前冲刺试卷附答案详解【考试直接用】
- 2026河南郑州航空港区招聘初中阶段教学辅助人员笔试题库附完整答案详解【易错题】
- 2026浙江衢州市柯城区教育局下属事业单位选调工作人员1人笔试题库附答案详解【达标题】
- 2026上海交通大学中银科技金融学院产教融合发展中心招聘1名考前冲刺试卷及完整答案详解(有一套)
- 泳池灯光安装调试施工方案及技术措施
- 2026年部编版二年级上册语文教材分析
- 2026年养老管理师考试试题及答案详解
- T-CECS 《多段多级AO除磷脱氮技术规程》
- 弗思特FORCITIS白皮书4.0-超高性能混凝土UHPC材料在建筑幕墙中的应用
- 涟源市六亩塘镇招聘社区网格员备考题库附答案详解
- 2026年电商平台主播合作协议内容范本
- 20S515 钢筋混凝土及砖砌排水检查井
- 主变基础施工方案
- 冠心病心绞痛临床诊疗指南(2025版)
- 医疗机构医疗废物暂存间设置规范与管理培训
评论
0/150
提交评论