《数据采集技术(初级)》实验手册项目5:爬取网络数据.docx
任务1使用Requests库爬取小说网站任务描述本任务是使用Requests库爬取214玫瑰恋区所有章节的网址,之后再将小说中每章节的内容爬取下来,保存在本地,实现本任务的思路如下:(1)使用requests获取网页源代码。(2)使用正则表达式获取内容。(3)使用文件进行操作。任务步骤第一步打开小说网站,找到“214玫瑰恋区”小说的位置。如下图所示。第二步使用requests获取网页源码start_url=,http:/book38487defget_source(url):IlIffl获取网页源代码。:paramurl:网址:return:网页源代码html=requests.get(url)returnhtml.content.decode(,gbk,)#这个网页需要使用gbk方式解码才能让中文正常显示第三步右键选择“查看网页源代码”,如下图所示。BreatheInEssentialOilsOPEN乖乖费尔作品集介:应叵()Ah*fflEW5211国明星李俊的成百Q手切二年出学生宁儿,国一次今外军碣结r.:5®Aft向U子头忖扑的易世:育人说的是独生子.有人说也是遗谖.色育人诧他是“豪独子.但Wg(E)Ctd*R了JlW月有为CtfkS政11(E).CtruP飞生H鬼VS小魔女第二我被他瞪了M三W三如。9成中文(而体)差点儿没命第六宣大闹直除蔼七宣l*RKlftS5SCuuu好友被多架明的联LsSrBlI"i三IT5ST-第四步点击之后效果如下图所示。<tbody><table><tablecellspacing""1*cellpaddxng三*,8*wdth*800*align-*center-bgcolL*d4d0c8"border*0><tbody><tralign="center*bgcolor="ffffcc"><tdalign三"center*ColSPan"4"><strong>正文</strongXtd>tr><trbgcolor-ffffff>><tdwidth-*,25*wXauef-e187729.html->«-St<tdwidth-m25%,Xairef-187730.html"第二堂<tdwidth-j,25*,><a>ref”187731.htmT>籥三章<tdwidth-*,25*wXaIref-187732.htm第四章<tr><trbcolor=ffffff*><td><ahref-,18773html。第五章<td><ahref-18773html,第六章<td><ahref=*18773html”第七章<td><ahref-,18773html'>第八章<tr><trbgcolor=*ffffff*-><td><ahref-18773html"第九章<td><ahref=*18773html">第十章<td>&«bsp;</td><td>4cnbsp:</td><tr><tbody><table>飞车ItilVS小魔女<a><td>被他吻了<a><td>有位帅哥宜取我"a><Ad>美里理身秀<a><td>爰点儿没命<a><td>大用医院/aX/td突来笠故<a><td>他的后妈是我西<a><td>好友被绑架<a><td>特别的礼物<a><td>由于网址存在于va>标签中,但va>标签本身没有特殊的标识符来区分章节的链接和其他的普通链接,因此需要使用先抓大再抓小的技巧。构造正则表达式,先提取出包含每一章链接的一大块内容,再对这一大块内容使用正则表达式提取出网址。由于源代码中的网址使用的是相对路径,因此需要手动拼接为绝对路径,代码如卜丁A343536"38394o414243444546"484985152535455565758596o616263646566676869defget_toc(html):获取每一章链接,储存到一个列表中并返回。:paramhtml:目录页源代码:return:每章链接toc_url_list=toc_block=re.findall('正文(.*?)<tbody>Ihtml,re.S)0toc_url=re.findall(,href=(.*?),ttoc_block,re.S)forurlintoc_url:toc_url_list.append(start_url+url)returntoc_url_list第五步点击“第一章”,查看源码,如下图所示。<tdheItht-alpyleftOccolor-WbFFFF?ftnbsp.ftnbs,<ahrefhttps/<w.kanunub.coM>HHi5M)<a>-Mt.<ahret-index.ht<tr><table><tablvdth三*880*bordr*0*align*cntr*coIlpadding-O"cll11>acn<*0*><tr><tdvdth-*880-he:LghL'5'btcolor-*«fffff><td><tr><tr><tdwidth-*880-hcghs'2-bccolor三W2659Cr><td><tr><tr><tdwidth-*880*he"hs'5"bccolor-Wffffff1,><td><tr>table><tablevdth三*880*border*"。alit11三*center*cellpaddin<三*O*cel】SPaClnL"0"><tr><tdvdth*880*he<ht*60*al<n*center*b<color-*#FFFFFF*XstronjXfontcolor*#dcl43c*sie*4*>第一堂飞空贯戈VS小黄女<fo<tr><tr><tdheight=*23*ali£n=*center"btcolor三*FFFFFF"XscrptSre="ads2024/CQntttIttitle728x9thMX/SCrH)t><td><tr><table><tablevdth*880*border*Oali<n*center*CellpaddingHTcellspacn<*O*><tr><tdwidth"*30*he<ht*23*altn*center*bgcolor*WFFFFF"><td><tdvdth=820alen=wleffbccolor=WFFFFF*><P> .6absp;6nbsp.tobsp.(1)急夕卜车祸<br><br>tobn>tobsp:tobsp;&nbrp.“快崎,快点儿!祓摄到了秋可不欲你!”茂在林州美前面边跑边哪。<br/><br/>fcnbsp.OnbSAftnbSAinbsp.“十号儿,观且不助7。哎峭!或期!不过,那小子那个生气的样子息是好笑。R林I育美在他后头气嘿吁吁一提到刚才<br/>fcnbsp.fcnbsp;tobsp.tobsp.“少庞话,快点!"Ji叫菅,迅速落下她好运<br/><br/>fcnb=:5Up:5bsp:SbrP盘听到林美在我后头IftlihM亍馨儿,你这个没食心的!狼心狗修,忘恩负义,没U没义!<br/><br/>inbsp.ftnbsp;fcnb$p:4nb$p.这就是我的死克一一#精美,小学同卓,现在的成EB中学初二四班学生,与独所在的一班隔一个弱金。<br/><br/>fenb3p. ,&nbgp, ,我知道再听下去,她连电里爬外的话都骂得出来,又加快7脚步<br/><br/>印隶宁譬儿可是成田中字扪二年级的长J8处跑;3军,连续刷新过学校记录!这个时体不施展本铺更待何时?<br/>搜索源代码中的vp>标签和<p>标签,发现它刚好有一对,正好包裹着正文。而正文中的Vbr/>标签,则没有必要用正则表达式来去除,直接使用字符串的replace。方法把其替换为空即可。代码如下:defget_article(html):获取每一章的正文并返回章节名和正文。:paramhtml:正文源代码:return:章节名,正文chapter_name=re.search(,size=n4n>(.*?)<*,htmlzre.S).group(1)textblock=re.search(,<p>(.*?)<p>,html,re.S).group(1)text_block=text_block.replace(,<br>,)returnchapter_name,text_block第六步保存数据到本地,代码如下:efsave(chapter,article):VlIVVl将每一章保存到本地。Jparamchapter:章节名,第X章:paramarticle:正文内容:return:NoneVlIVTlos.makedirs(,214玫瑰恋区,exist_ok=True)#如果没有“动物农场文件夹,就创建一个,如果有,则什么都不做“withopen(os.path.join(,214玫瑰恋区Ichapter+,.txt,),w,zencoding=,utf-8,)asf:f.write(article)defquery_article(url):VlIfVl根据正文网址获取正文源代码,并调用get_article函数获得正文内容最后保存到本地。:paramurl:正文网址:return:NoneVlVVVlarticle_html=get_source(url)chapter_name,article_text=get_article(article_html)save(chapter_name,article_text)第七步编写主函数,代码如下:if_name_=,_main_,:toc_html=get_source(start_url)toc_list=get_toc(toc_html)pool=Pool(4)pool.map(query_article,toc_list)第八步programO>214玫瑰恋区-C名称修改日期第八章礴身骋朝.txt2020/5/613:18第二章被他吻了txt2020/5/613:18第九堂好友祓绑架.txt2020/5/613:180第六章大闰医院.txt2020/5/613:18C第七章突来变故txt2020/5/613:18第三章有位帅哥喜欢我xt2020/5/613:18第十章特SI的礼物.txt2020/5/613:18L第四登美男裸身秀t×t2020/5/61