任務:需要擷取廣告使用者候選的資料集
實作思路:
1.在微網誌話題中篩選含廣告使用者較多的話題
2.使用python爬蟲技術擷取話題使用者賬号
3.擷取使用者行為資訊,并進行手工标注
1.篩選廣告話題
通過對微網誌的使用,發現購物分享類話題廣告使用者較多
話題連結如下:https://weibo.com/p/100808ad1339d43994fdc06618aa28e5ec38f1/super_index

2.擷取廣告使用者
通過對網頁結構分析可知
每一頁加載時初始加載一次,動态加載兩次
動态加載時調用ajax進行加載,主要參數如下
pagebar:為動态加載時參數(0或1)
page:目前頁數
pre_page:和目前頁數值相同
current_page:目前的塊頁,第一頁動态加載的第一塊值為1,第二塊為2;第二頁動态加載的第一塊值為4,第二塊值為5
since_id:不知道什麼id含義,但可以通過上面網頁正則提取獲得
完整代碼如下所示:
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¤t_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¤t_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)
擷取的原始廣告使用者如下所示
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)
擷取最終标記好的資料如下
其中增加了标記的值,成功實作廣告使用者資料集的擷取