作者:某某白米饭 来源:Python技术 派森酱在刷豆瓣的时候发现,豆瓣上居然还有一个叫我被豆油表白了的交友话题,阅读量居然高达8087734次,拥有1000篇话题,几乎每篇平均被阅读了8000,看了一下里面的小姐姐照片还挺多的。今天我们就用爬虫把他们下载下来。 首先在浏览器中登录豆瓣,打开话题广场在右侧有一个分类查看话题点开情感。 打开后就是下面这个样子的。 爬虫开始 打开控制面板F12,找到带items的连接,然后复制整个RequestHeaders到代码中,采用复制cookie的方式登录豆瓣。 urlbasichttps:m。douban。comrexxarapiv2gallerytopic18306items?fromweb1sorthotstart{}count20statusfulltext1guestonly0ckGStYheaders{Accept:applicationjson,textjavascript,;q0。01,AcceptEncoding:gzip,deflate,br,AcceptLanguage:zhCN,zh;q0。9,Connection:keepalive,ContentType:applicationxwwwformurlencoded,Cookie:bidn7vzKfXLoUA;doubanfavremind1;ll108296;utmc30149280;utmz30149280。1624276858。2。2。utmcsrgoogleutmccn(organic)utmcmdorganicutmctr(not20provided);apv0,6。0;gruseridca8b915619264c829dda27fc7f7ad51b;utma30149280。66080894。1623848440。1624276858。1624282580。3;utmt1;dbcl2157316158:e4ojS8paSUc;ckGStY;pushdoumailnum0;utmv30149280。15731;frodotka187943e3a17e8bbe496bcbaae47ba31;pushnotynum0;utmb30149280。11。10。1624282580,Host:m。douban。com,Origin:https:www。douban。com,Referer:https:www。douban。comgallerytopic18306,secchua:Not;ABrand;v99,GoogleChrome;v91,Chromium;v91,secchuamobile:?0,SecFetchDest:empty,SecFetchMode:cors,SecFetchSite:samesite,UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome91。0。4472。106Safari537。36} urlbasic就是可以返回列表json的地址,只有start参数在随鼠标下滑翻页改变。 foriinrange(1,35):resrequests。get(urlurlbasic。format(i20),headersheaders)resjsonjson。loads(res。text)index0foriteminresjson。get(items):targetitem。get(target)statustarget。get(status)print(这里是第{}个。format((i1)20index));indexindex1withopen(douban。txt,a)asf:f。write(json。dumps(status));sleeptimerandom。randint(1,10)time。sleep(sleeptime) 这里把下载下来的数据缓存在txt文件里面。图表交友地图 先提取小姐姐的地址做一个热力图,看看哪边的小姐姐最多。 需要安装cpca第三方库,cpca是一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块。简单来说就是将交友文字中出现的市区名称转换为省份名称。pipinstallcpca windows上安装可能出现Buildingwheelforpyahocorasick(setup。py)。。。error错误,需要安装MicrosoftVisualCBuildTools后再pipinstallcpca。 第二个安装的是pyecharts第三方库,用来可视化热力图。pipinstallpyecharts 可以看出华东和华南交友的小姐姐要比华北和西部的小姐姐多很多,看起来单身小姐姐都集中在一线城市及其周边。 Python代码如下:frompyecharts。chartsimportGeofrompyecharts。globalsimportChartTypeaddrdic{}fileobjectopen(douban。txt,r)try:forlineinfileobject:itemjson。loads(line)ifitemNone:continueauthoritem〔author〕textitem〔text〕addrtransformcpca。transform(〔text〕)addrNoneifaddrtransform〔省〕。str。split()〔0〕!None:addraddrtransform〔省〕。str。split()〔0〕〔0〕。rstrip(省)这里提取创作者里面的地址ifaddrisNoneandauthor〔loc〕isnotNone:cpca。transform(〔author〔loc〕〔name〕〕)ifaddrtransform〔省〕。str。split()〔0〕!None:addraddrtransform〔省〕。str。split()〔0〕〔0〕。rstrip(省)这个地址要转换一下,不然echarts不认ifaddrisnotNone:ifaddr广西壮族自治区:addr广西ifaddr香港特别行政区:addr香港ifaddr澳门特别行政区:addr澳门addrdic〔addr〕addrdic。get(addr,0)1finally:fileobject。close()小姐姐热力图(Geo()。addschema(maptypechina)。add(,〔list(z)forzinzip(list(addrdic。keys()),list(addrdic。values()))〕,typeChartType。HEATMAP,)。setseriesopts(labeloptsopts。LabelOpts(isshowFalse))。setglobalopts(visualmapoptsopts。VisualMapOpts(),)。render(热力图。html))词云 词云可以用来展示小姐姐们自身的情况和对对方的要求。用pyecharts生成词云和用jieba第三方库分词。 安装一下jieba第三方库。pipinstalljieba Python代码如下:importjiebafromcollectionsimportCounterfrompyecharts。chartsimportWordCloudforlineinfileobject:itemjson。loads(line)ifitemNone:continuetextitem〔text〕seglistjieba。cut(text,cutallFalse)textlist。extend(seglist)词频统计,使用Count计数方法wordscounterCounter(textlist)将Counter类型转换为列表wordslistwordscounter。mostcommon(500)(WordCloud()。add(seriesname,datapairwords,wordsizerange〔20,66〕)。render(词云。html))照片下载 最后来下载小姐姐照片吧,直接用request。get()方法请求images里面的地址。forlineinfileobject:itemjson。loads(line)ifitemNone:continueimagesitem〔images〕iditem〔id〕index0foriinimages:indexindex1urli。get(large)。get(url)rrequests。get(url);withopen(。image{}{}。jpg。format(id,index),wb)asf:f。write(r。content)总结 这篇爬虫到这里就结束了,派森酱在这里祝愿朋友们都能找到自己的良人。