<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python搞定豆瓣上征婚交友的小姐姐們~

          共 9560字,需瀏覽 20分鐘

           ·

          2021-07-06 09:26

          文 | 某某白米飯

          來源:Python 技術(shù)「ID: pythonall」

          大家好,我是菜鳥哥!

          派森醬在刷豆瓣的時候發(fā)現(xiàn),豆瓣上居然還有一個叫我被豆油表白了的交友話題,閱讀量居然高達 8087734 次,擁有 1000+ 篇話題,幾乎每篇平均被閱讀了 8000+ ,看了一下里面的小姐姐照片還挺多的。今天我們就用爬蟲把他們下載下來。

          首先在瀏覽器中登錄豆瓣,打開話題廣場在右側(cè)有一個分類查看話題點開情感。

          打開后就是下面這個樣子的。

          爬蟲開始

          打開控制面板 F12, 找到帶 items 的連接,然后復(fù)制整個 Request Headers 到代碼中,采用復(fù)制 cookie 的方式登錄豆瓣。

           url_basic = 'https://m.douban.com/rexxar/api/v2/gallery/topic/18306/items?from_web=1&sort=hot&start={}&count=20&status_full_text=1&guest_only=0&ck=GStY'
            headers = { 
              'Accept''application/json, text/javascript, */*; q=0.01',
              'Accept-Encoding''gzip, deflate, br',
              'Accept-Language''zh-CN,zh;q=0.9',
              'Connection''keep-alive',
              'Content-Type''application/x-www-form-urlencoded',
              'Cookie''bid=n7vzKfXLoUA; douban-fav-remind=1; ll="108296"; __utmc=30149280; __utmz=30149280.1624276858.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ap_v=0,6.0; gr_user_id=ca8b9156-1926-4c82-9dda-27fc7f7ad51b; __utma=30149280.66080894.1623848440.1624276858.1624282580.3; __utmt=1; dbcl2="157316158:e4ojS8paSUc"; ck=GStY; push_doumail_num=0; __utmv=30149280.15731; frodotk="a187943e3a17e8bbe496bcbaae47ba31"; push_noty_num=0; __utmb=30149280.11.10.1624282580',
              'Host''m.douban.com',
              'Origin''https://www.douban.com',
              'Referer''https://www.douban.com/gallery/topic/18306/',
              'sec-ch-ua''" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
              'sec-ch-ua-mobile''?0',
              'Sec-Fetch-Dest''empty',
              'Sec-Fetch-Mode''cors',
              'Sec-Fetch-Site''same-site',
              'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
            }

          url_basic 就是可以返回列表 json 的地址,只有 start 參數(shù)在隨鼠標下滑翻頁改變。

           for i in range(1,35):
              
              res = requests.get(url=url_basic.format(i * 20), headers=headers)
              res_json = json.loads(res.text)
              index = 0
              for item in res_json.get('items'):
                target = item.get('target')
                status = target.get('status')
                print("這里是第 {} 個".format((i - 1) * 20 + index));
                index = index + 1
                with open('douban.txt''a+'as f:
                  f.write(json.dumps(status) + '\n');

              sleeptime=random.randint(110)
              time.sleep(sleeptime)

          這里把下載下來的數(shù)據(jù)緩存在 txt 文件里面。

          圖表

          交友地圖

          先提取小姐姐的地址做一個熱力圖,看看哪邊的小姐姐最多。

          需要安裝  cpca 第三方庫,cpca 是一個用于提取簡體中文字符串中省,市和區(qū)并能夠進行映射,檢驗和簡單繪圖的python模塊。簡單來說就是將交友文字中出現(xiàn)的市區(qū)名稱轉(zhuǎn)換為省份名稱。

          pip install cpca

          windows 上安裝可能出現(xiàn) Building wheel for pyahocorasick (setup.py) ... error 錯誤,需要安裝 Microsoft Visual C++ Build Tools 后再 pip install cpca。

          第二個安裝的是 pyecharts 第三方庫,用來可視化熱力圖。

          pip install pyecharts

          可以看出華東和華南交友的小姐姐要比華北和西部的小姐姐多很多,看起來單身小姐姐都集中在一線城市及其周邊。

          Python 代碼如下:

          from pyecharts.charts import Geo
          from pyecharts.globals import ChartType

          addr_dic = {}
          file_object = open('douban.txt','r')
          try:
              for line in file_object:
                  item = json.loads(line)
                  if item == None:
                      continue
                  author = item['author']
                  text = item['text']

                  addr_transform = cpca.transform([text])
                  addr = None

                  if addr_transform['省'].str.split(' ')[0] != None:
                      addr = addr_transform['省'].str.split(' ')[0][0].rstrip('省')

                  //這里提取創(chuàng)作者里面的地址
                  if addr is None and author['loc'is not None:
                      cpca.transform([author['loc']['name']])

                      if addr_transform['省'].str.split(' ')[0] != None:
                          addr = addr_transform['省'].str.split(' ')[0][0].rstrip('省')
                  
                  //這個地址要轉(zhuǎn)換一下,不然 echarts 不認
                  if addr is not None:
                      if addr == '廣西壯族自治區(qū)':
                          addr = '廣西'
                      if addr == '香港特別行政區(qū)':
                          addr = '香港'
                      if addr == '澳門特別行政區(qū)':
                          addr = '澳門'
                  addr_dic[addr] = addr_dic.get(addr, 0) + 1

          finally:
              file_object.close()

          // 小姐姐熱力圖
          (
              Geo()
              .add_schema(maptype="china")
              .add(
                  "",
                  [list(z) for z in zip(list(addr_dic.keys()), list(addr_dic.values()))],
                  type_=ChartType.HEATMAP,
              )
              .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
              .set_global_opts(
                  visualmap_opts=opts.VisualMapOpts(),
              ).render("熱力圖.html")
            )

          詞云

          詞云可以用來展示小姐姐們自身的情況和對對方的要求。用 pyecharts 生成詞云和用 jieba 第三方庫分詞。

          安裝一下 jieba 第三方庫。

          pip install jieba

          Python 代碼如下:

          import jieba
          from collections import Counter
          from pyecharts.charts import WordCloud

          for line in file_object:
              item = json.loads(line)
              if item == None:
                  continue
              text = item['text']

              seg_list = jieba.cut(text, cut_all=False)
              text_list.extend(seg_list)

          # 詞頻統(tǒng)計,使用Count計數(shù)方法
          words_counter = Counter(text_list)
          # 將Counter類型轉(zhuǎn)換為列表
          words_list = words_counter.most_common(500)
          (
              WordCloud()
              .add(series_name="", data_pair=words, word_size_range=[2066])
              .render("詞云.html")
          )

          照片下載

          最后來下載小姐姐照片吧,直接用 request.get() 方法請求 images 里面的地址。

          for line in file_object:
              item = json.loads(line)
              if item == None:
                  continue
              images = item['images']
              id = item['id']

              index = 0
              for i in images:
                  index = index + 1
                  url = i.get('large').get('url')
                  r = requests.get(url);
                  with open('./image/{}-{}.jpg'.format(id, index), 'wb'as f:
                      f.write(r.content) 

          總結(jié)

          這篇爬蟲到這里就結(jié)束了,派森醬在這里祝愿朋友們都能找到自己的良人。

          年度爆款文案


          星球即將漲價,速來!

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久一二三区 | 日本欧美性爱视频一区二区 | 日韩人妻无码精品免费shipin | 免费费国产黄色影院 | 1234视频看看日本在线 |