天天看點

微網誌資料處理——擷取廣告使用者資料集(三)1.篩選廣告話題2.擷取廣告使用者3.擷取使用者資訊4.标注廣告使用者

任務:需要擷取廣告使用者候選的資料集

實作思路:

1.在微網誌話題中篩選含廣告使用者較多的話題

2.使用python爬蟲技術擷取話題使用者賬号

3.擷取使用者行為資訊,并進行手工标注

1.篩選廣告話題

通過對微網誌的使用,發現購物分享類話題廣告使用者較多

話題連結如下:https://weibo.com/p/100808ad1339d43994fdc06618aa28e5ec38f1/super_index

微網誌資料處理——擷取廣告使用者資料集(三)1.篩選廣告話題2.擷取廣告使用者3.擷取使用者資訊4.标注廣告使用者

2.擷取廣告使用者

通過對網頁結構分析可知

每一頁加載時初始加載一次,動态加載兩次

動态加載時調用ajax進行加載,主要參數如下

pagebar:為動态加載時參數(0或1)

page:目前頁數

pre_page:和目前頁數值相同

current_page:目前的塊頁,第一頁動态加載的第一塊值為1,第二塊為2;第二頁動态加載的第一塊值為4,第二塊值為5

since_id:不知道什麼id含義,但可以通過上面網頁正則提取獲得

微網誌資料處理——擷取廣告使用者資料集(三)1.篩選廣告話題2.擷取廣告使用者3.擷取使用者資訊4.标注廣告使用者

完整代碼如下所示:

import json
from urllib import request
import urllib.parse
import config
import re


headers = config.get_headers()
data = []
for page_num in range(1,21):
    print("第%d頁"%page_num)
    print("第-1塊")
    try:
        add = urllib.request.Request(url='https://weibo.com/p/100808ad1339d43994fdc06618aa28e5ec38f1/super_index?page=%d' % page_num,
                                     headers=headers)
        r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')
        forums = re.findall(r'<div   tbinfo=\\"ouid=(\d*)', r)
    except:
        continue
    data.extend(forums)
    for forum in forums:
        print(forum)
    url_a = re.findall(r'(tab=super_index&current_page=\d+&since_id=\d+)', r)[0]
    for pagebar_num in range(0,2):
        print("第%d塊" % pagebar_num)
        url = "https://weibo.com/p/aj/v6/mblog/mbloglist?domain=100808&pagebar=%d&pl_name=Pl_Core_MixedFeed__262&id=100808ad1339d43994fdc06618aa28e5ec38f1&feed_type=1&page=%d&pre_page=%d" \
              % (pagebar_num,page_num,page_num)
        url = url + "&" + url_a
        add = urllib.request.Request(
            url=url,
            headers=headers)
        r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')
        forums = re.findall(r'<div   tbinfo=\\"ouid=(\d*)', r)
        data.extend(forums)
        for forum in forums:
            print(forum)
        try:
            url_a = re.findall(r'(tab=super_index&current_page=\d+&since_id=\d+)', r)[0]
        except:
            url_a = ""


print(len(data))
data = list(set(data))
print(len(data))
print(json.dumps(data, ensure_ascii=False, indent=4))
json_f = open("../users_data/advert_user_data/adverts_user.json", "w")
json.dump(data, json_f, indent=4)
           

3.擷取使用者資訊

通過調用此前封裝好的函數實作資料的擷取

f = open("../users_data/advert_user_data/adverts_user.json", "r")
str = f.read()
data = json.loads(str)
data_all = []
for uid in data:
    print(uid)
    dic_uid = {}
    dic_uid["uid"] = uid
    get_user_info.get_user_info(uid, dic_uid)
    get_user_action.get_user_action(uid,dic_uid)
    data_all.append(dic_uid)
    print(json.dumps(dic_uid, ensure_ascii=False, indent=4))

json_f = open("../users_data/advert_user_data/dic_marked_init.json", "w")
json.dump(data_all, json_f, indent=4)
           

擷取的原始廣告使用者如下所示

微網誌資料處理——擷取廣告使用者資料集(三)1.篩選廣告話題2.擷取廣告使用者3.擷取使用者資訊4.标注廣告使用者

4.标注廣告使用者

使用selenium實作自動化通路網頁并進行标注

browser = webdriver.Firefox()
# 擷取 selenium cookies方法
# browser.get("https://weibo.com/u/2828585100")
# input()
# browser.get("https://weibo.com/u/2828585100")
# print(browser.get_cookies())
# 添加cookies
cookies = []
browser.get("https://weibo.com/337558589?is_all=1")
browser.delete_all_cookies()
for cookie in cookies:
    browser.add_cookie(cookie)
# browser.get("https://weibo.com/337558589?is_all=1")


f = open("../users_data/advert_user_data/dic_marked_init.json", "r")
str = f.read()
data = json.loads(str)
data_all = []
for item in data:
    uid = item["uid"]
    browser.get("https://weibo.com/u/%s?is_all=1" % uid)
    mark_advert = input()
    item["mark_advert"] = mark_advert
    data_all.append(item)

json_f = open("../users_data/advert_user_data/dic_marked_final.json", "w")
json.dump(data_all, json_f, indent=4)
           

擷取最終标記好的資料如下

微網誌資料處理——擷取廣告使用者資料集(三)1.篩選廣告話題2.擷取廣告使用者3.擷取使用者資訊4.标注廣告使用者

其中增加了标記的值,成功實作廣告使用者資料集的擷取

繼續閱讀