整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Python爬蟲實戰:QQ空間全自動點贊工具

          Python爬蟲實戰:QQ空間全自動點贊工具

          Q空間自動點贊

          • 前景提要目標確定分析介紹登陸獲取cookie尋找XML尋找可變參數獲取第一個空間動態尋找點贊所需的URL尋找可變參數功能提升到秒贊全部代碼最后還是希望你們能給我點一波小小的關注。奉上自己誠摯的愛心

          私信小編01即可獲取大量Python學習資料

          前景提要

          因為我周圍的小伙伴們天天跟我說的最多的一句話就是:空間第一條點贊。
          所以說我還不如直接做一個自動點贊的代碼呢,免得天天催我點贊。


          目標確定

          • QQ空間秒贊

          分析介紹

          登陸獲取cookie

          首先既然是對 QQ空間的一系列操作,自然是先解決登陸方面,在這篇文章里面我就不過多介紹了,因為我上幾期之前對QQ空間已經做了一定的介紹了。直接放出鏈接就好。歡迎看博主以前的文章

          def search_cookie():
              qq_number=input('請輸入qq號:')
              if not __import__('os').path.exists('cookie_dict.txt'):
                  get_cookie_json(qq_number)
              with open('cookie_dict.txt', 'r') as f:
                  cookie=json.load(f)
              return True
          def get_cookie_json(qq_number):
              password=__import__('getpass').getpass('請輸入密碼:')
              from selenium import webdriver
              from selenium.webdriver.chrome.options import Options
              login_url='https://i.qq.com/'
              chrome_options=Options()
              chrome_options.add_argument('--headless')
              driver=webdriver.Chrome(options=chrome_options)
              driver.get(login_url)
              driver.switch_to_frame('login_frame')
              driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
              time.sleep(1)
              driver.find_element_by_xpath('//*[@id="u"]').send_keys(qq_number)
              driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)
              time.sleep(1)
              driver.find_element_by_xpath('//*[@id="login_button"]').click()
              time.sleep(1)
              cookie_list=driver.get_cookies()
              cookie_dict={}
              for cookie in cookie_list:
                  if 'name' in cookie and 'value' in cookie:
                      cookie_dict[cookie['name']]=cookie['value']
              with open('cookie_dict.txt', 'w') as f:
                  json.dump(cookie_dict, f)
              return True
          def get_g_tk():
              p_skey=self.cookie['p_skey']
              h=5381
              for i in p_skey:
                  h +=(h << 5) + ord(i)
                  g_tk=h & 2147483647

          尋找XML

          當我們拿到cookie信息和g_tk這個參數之后,繼續去尋找空間好友動態的XML在何處。
          首先點到XML位置一個個查找,發現有一個feeds3_html_more很像,點進去發現的確是我們要找的url鏈接。

          尋找可變參數

          這個鏈接所需要的參數有很多,在這里列舉出來

          • uin:
          • scope:
          • view:
          • daylist:
          • uinlist:
          • gid:
          • flag:
          • filter:
          • applist:
          • refresh:
          • aisortEndTime:
          • aisortOffset:
          • getAisort:
          • aisortBeginTime:
          • pagenum:
          • externparam:
          • firstGetGroup:
          • icServerTime:
          • mixnocache:
          • scene:
          • begintime:
          • count:
          • dayspac:
          • sidomain:
          • useutf8:
          • outputhtmlfeed:
          • rd:
          • usertime:
          • windowId:
          • g_tk:
          • qzonetoken:
          • g_tk:

          這些參數中類似于可變參數的一共有五個。

          • qzonetoken
          • windowId
          • rd
          • usertime
          • g_tk
          1. qzonetoken 參數在源碼中是個可變的“定值”,因為每次刷新這個參數都會變,但是源碼中卻給出了他的具體值。直接獲取即可。

          def get_space():
              your_url='https://user.qzone.qq.com/' + str(qq_number)
              html=requests.get(your_url,headers=headers,cookies=cookie)
              if html.status_code==200:
                  qzonetoken=re.findall('window.g_qzonetoken=(.*?);',html.text,re.S)[1].split('"')[1]
              return True
          1. windowId 與 rd 雖說每次刷新結果都不同,但是經過博主多次實驗得出,這兩個參數對整體并沒有什么影響,可以直接抄下來。
          'rd': '0.9311604844249088',
          'windowId': '0.51158950324406',
          1. usertime 參數看似很眼熟,是個時間戳參數,因為位數不對,說明應該是被放大了一千倍。
          'usertime': str(round(time.time() * 1000)),
          1. g_tk 參數上次教程已給出。在JavaScript中分析即可獲得。
          def get_g_tk():
              p_skey=self.cookie['p_skey']
              h=5381
              for i in p_skey:
                  h +=(h << 5) + ord(i)
                  g_tk=h & 2147483647

          獲取第一個空間動態

          我們拿到XML以及各個參數后,即可訪問該網頁獲取其返回值了。
          但是這個返回與其他的有一些不同的是,它不僅僅是個json文件,我們無法獲取后直接轉換成字典格式去給我們使用,這就很麻煩。


          我們獲取字符串后,首先先將前后不一致的都切片扔掉,之后經過一系列處理后發現,我們很難將這個看似像json格式的字符串轉換成字典。
          在這里我繼續介紹一個第三方庫demjson。

          demjson 可以解決不正常的json格式數據

          demjson的使用方法很簡單。

          encode將 Python 對象編碼成 JSON 字符串decode將已編碼的 JSON 字符串解碼為 Python 對象

          # 例子
          # -*- coding: utf-8 -*-
          import demjson
          js_json="{x:1, y:2, z:3}"
          py_json1="{'x':1, 'y':2, 'z':3}"
          py_json2='{"x":1, "y":2, "z":3}'
          data=demjson.decode(js_json)
          print(data)
          # {'y': 2, 'x': 1, 'z': 3}
          data=demjson.decode(py_json1)
          print(data)
          # {'y': 2, 'x': 1, 'z': 3}
          data=demjson.decode(py_json2)
          print(data)
          # {'y': 2, 'x': 1, 'z': 3}

          我們使用demjson直接將該字符串轉換為耳熟能詳的字典格式,提取其中的data的data,即為前八條動態的每個參數,但我們這里只要第一個說說的動態信息。

          text=html.text[10:-2].replace(" ", "").replace('\n','')
          json_list=demjson.decode(text)['data']['data']
          qq_spaces=json_list[0]

          我們拿到其信息后,先提取一些我們比較想知道的東西,比如名字、QQ號、發布時間、所獲贊數、說說內容、說說地址等等結果。
          在 qq_spaces 參數中我們發現里面有一個很長也很特殊的一個結果是 html 結果,這個結果里面很長,簡單來看是個網頁常規代碼,應該是被JavaScript寫入到網頁中了,既然不是全部代碼,那么只能用正則提取一下里面的具體我們需要的東西了。

          content=str(qq_spaces['html'])
          try:zanshu=re.findall('<spanclass="f-like-cnt">(.*?)</span>人覺得很贊</div>',content,re.S)[0]
          except:return None
          time_out=str(qq_spaces['feedstime'])
          print("名字:"+str(qq_spaces['nickname']))
          print("QQ號:"+str(qq_spaces['opuin']))
          print("時間:"+time_out)
          print('贊數:'+zanshu)
          times=qq_spaces['abstime']
          his_url=re.findall('data-curkey="(.*?)"',content,re.S)[0]

          尋找點贊所需的URL

          在QQ空間隨便找個好友點個贊吧,這樣我們才能接收到請求。
          我們首先清空原來動態產生的抓包,直接點個贊發現關于dolike的url只有三個,第一個是個POST請求,應該是我們所需要的點贊網址。

          尋找可變參數

          我們獲取到URL后,找到里面所需要的參數。發現一共有十一個參數,在這里猜測應該不存在加密參數。

          1. qzreferrer參數為自己QQ空間的網址,表示從哪里來的鏈接地址。
          2. opuin參數為自己的QQ號,可以直接在代碼提取。
          3. unikey參數與curkey參數為被點贊方的鏈接,即說說鏈接,剛才已獲取。
          4. abstime參數為被點贊方說說的發布時間的時間戳。
          5. fid參數為被點贊方的鏈接后綴。

          既然參數沒什么問題那就直接寫代碼吧。

          def get_zan(times,his_url):
              data={'g_tk': g_tk,'qzonetoken': qzonetoken}
              post_data={
                  'qzreferrer': 'https://user.qzone.qq.com/'+str(qq_number),
                  'opuin': str(qq_number),
                  'unikey': str(his_url),
                  'curkey': str(his_url),
                  'from': '1',
                  'appid': '311',
                  'typeid': '0',
                  'abstime': str(times),
                  'fid': str(his_url).split('/')[-1],
                  'active': '0',
                  'fupdate': '1'
              }
              url='https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?'
              url=url + urllib.parse.urlencode(data)
              html=requests.post(url,headers=headers,cookies=cookie,data=post_data)
              if html.status_code==200:print("點贊成功" if len(html.text)==469 else "點贊失敗")

          功能提升到秒贊

          因為樹莓派并不是很不錯的問題,這個代碼做不到絕對的秒贊。

          1. 在本地建立一個文件,負責寫入最后一條說說所產生的時間戳。
          2. 比對當前時間戳與空間第一條說說是否相同,若相同則無更新。
          3. 點贊后重寫文件,以便下次使用代碼即可秒贊。
          def run_tolike():
              if os.path.exists('time_out.txt'):
                  with open('time_out.txt','r') as f:
                      time_out=f.read()
              else:time_out=None
              while True:
                  get_friends_list()
                  time.sleep(__import__('random').randint(0,5)) # 秒贊?
          if not time_out or time_out !=time_out:
              time_out=time_out
              get_zan(times,his_url)
              return True
          else:log('說說無更新,等待中...')
          with open('time_out.txt','w') as f:
              f.write(str(times))

          全部代碼

          SEO必須要懂HTML,說的是一點都沒錯,不過其實是不需要全部都懂,最重點的你懂了會用,基本上都是事半功倍了。可以這么說一個不懂代碼的優化人員不算是一個合格的好優化。下面就總結一下做優化,必須要懂得幾個最重要的html代碼,希望能幫到大家。

          1.Title網站標題標簽

          1. Title標簽有兩個地方的用途一個是用在網站的主題說明,用來告訴網友這個網站的主旨是什么,是什么樣的網站,一般用來說明網站主題的詞2-3個為最佳。目前搜索引擎對Title的重視程度尤為重視所以建議慎重考慮關鍵詞。

          2. Title標簽的第二個用法是,在A標簽里面對鏈接文字強調說明的。鼠標經過會有提示,可以增加網站關鍵詞的密度。

          2.description描述標簽

          描述標簽一般會出現在抓取的快照里面,對網站的收錄SEO排名也是有一定的影響,不過現在搜索引擎都是智能化的,有時候抓取的并不是你自己所寫的描述標簽。而會根據用戶搜索關鍵詞相關度匹配。一般建議長度在100 個字左右不宜過長。

          3.keywords關鍵詞標簽

          關鍵詞keywords設置現在在搜索比重上面也越來越不明顯了,好多搜索已定提出可以放棄設置,因為搜索引擎能夠自動抓取,建議適當設置3個左右即可。

          1. H標簽

          1. H1標簽一般出現在頁面LOGO,或者單個文章的主標題部分。一個頁面最好能控制在2個之內切不可過多。

          2. H2標簽一般會用在網站欄目或者小標題標題部分。

          3. H3標簽一般用在側欄小標題子標題部分。

          4.<b>和<strong>文字加粗標簽

          文字加粗著重強調這文字比較重要,它會告訴搜索引擎此文字,在整個頁面文字中比較重要,所以一般加粗一些關鍵詞,一篇文章設置3-5個為宜,不可整篇加粗或者整篇不加粗。

          1. A標簽中的,Nofollow權重不傳遞,_blank新窗口打開

          1. rel標簽的屬性Nofollow權重不傳遞屬性,一般用于友情鏈接,或者網站有轉出站外的鏈接。

          2. target標簽的屬性_blank新窗口打開,以保留用戶在網站的停留時間,降低網站跳出率。

          3. se_prerender_url標簽目前還在研究,不過發現一些站長站都已經用上,搜索發現是谷歌吸引爬蟲而出,目前尚不具體了解用途。

          5.alt圖片描述標簽

          因為圖片不具有SEO屬性,所以alt越顯重要,ALT主要是圖片描述說明只用,用可以增加關鍵詞密度,但切記不可過多頻繁。

          HTML的不同標簽在SEO優化中的權重分數及權重排序

          內部鏈接文字:10分

          標題title:10分

          域名:7分

          H1,H2字號標題:5分

          每段首句:5分

          路徑或文件名:4分

          相似度(關鍵詞堆積):4分

          每句開頭:1.5分

          文本用法(內容):1分

          title屬性:1分 (不是<title>, 是A標簽中title屬性)

          加粗或斜體:1分

          alt標記:0.5分

          Meta描述(Description屬性):0.5分

          Meta關鍵詞(Keywords屬性):0.05分

          --------------------------------------------------------

          想了解更多網站優化,網絡營銷,網站運營,SEO/SEM/DSP,微博微信營銷

          可以百度搜索王塵宇查看更多進行交流。

          關注王塵宇個人QQ/微信:314111741

          想繪圖插件5.2(MxDraw5.2)


          夢想CAD是專業的CAD插件(控件),經過10年研發,可輕松在網頁、手機及BS/CS程序中使用CAD和瀏覽編輯DWG文件,不需安裝AutoCAD即可運行。

          控件核心代碼使用VC++ 2010開發,至今已有三十萬行代碼規模;2007年發布第一個Release版本,經過多年的版本更迭與技術沉淀,控件已經十分快速穩定。在關鍵的 空間搜索 上使用了復雜度極低的算法,并且使用 匯編 優化,可以處理50萬級的實體,圖形的顯示和處理效率比同類產品高出很多。


          夢想繪圖3d插件6.0(MxDraw6.03d)


          使用二位控件的顯示核心,基于 OpenCASCADE幾何造型引擎 ,創建錐、柱、環等基本幾何體,對幾何體進行 布爾操作 ,如:相加、相減、相較、倒角、斜切、鏤空、偏移、掃視;幾何 空間關系計算 ,如:法線、點積、叉積、投影、擬合;幾何體分析,如:質心、體積、曲率; 空間變換 ,如:平移、縮放、旋轉。


          夢想繪圖手機版插件6.0(MxDrawAndroid6.0/MxDrawIOS6.0/)


          使用二維控件的顯示核心,并專對手機顯示CAD圖紙做了極速優化 ,是目前手機上顯示DWG文件非常快的控件。


          夢想CAD軟件5.2(MxCAD5.0)


          使用二維控件的顯示核心,完全自主的二維CAD繪圖軟件,程序簡潔、運行快速、功能齊全、穩定可靠;兼容 所有版本的DWG文件 ,支持 ARX的二次開發接口。


          安裝包下載


          點擊此處下載

          運行環境

          支持以下的32/64平臺的系統:WindowsXP、Windows2000、WindowsVista、WindowsServer、Windows7、Windows8、Windows10。


          支持以下的瀏覽器:IE所有版本、火狐、谷歌4.5及以前的版本、360瀏覽器(兼容模式)、QQ瀏覽器。


          1

          QQ瀏覽器使用了最新的谷歌瀏覽器內核,可使用QQ瀏覽器代替谷歌瀏覽器運行控件

          支持語言

          網頁使用,支持 IE所有版本

          控件支持如下的語言進行二次開發:VC、VB、CSharp、Delphi、HTML、ASP、JAVA、JavaScript、C++、 Builder、PHP、.Net、易語言、PowerBuild等。

          編程接口

          有一萬多個接口函數 可供調用,提供Object Arx,AutoCAD VBA、COM開發接口,與AutoCAD二次開發類似的接口。

          文件格式

          控件支持自定義文件格式,擴展名為.mxg,mxg文件 穩定可靠 ,能 完整呈現DWG文件 ,支持圖紙預覽,加密;支持DWG、DXG、BMP、JPG、PNG、DWF、PDF、GIF、ICO DGN、SHP等。

          支持SHX、TrueType字體。

          控件與AutoCAD兼容,支持AutoCAD R14至AutoCAD 2017的 所有DWG圖紙格式 ,并保證能支持將來新出現的AutoCAD文件格式。

          網絡功能

          在控件支持的瀏覽器(見 運行環境 )中,控件可瀏覽服務器上的DWG文件,把DWG文件保存到服務器、在服務器后臺運行控件、把DWG轉成其他格式、提取信息等;支持FTP連接,二進制數據流加載。


          在網頁中使用控件演示

          主要功能

          DWG批量轉到PDF、DWF,圖紙信息搜索提取,測距離,算面積,圖章, 批注 ,捕捉,正交,實體閃爍,曲線離散,偏移,打斷,陣列,擴展數據讀寫,擴展記錄讀寫,構造選擇集,打印, 動畫自定義實體 ,組,右鍵菜單, 超連接 ,Undo,Redo,字典,圖層,標注樣式,線型樣式,文字樣式,視口,布局, 用戶坐標系 ,系統變量,圖紙比較,圖紙剪切,界面切換,動態提示,google百度地圖等。

          打印功能

          框選、全屏打印、后臺批量打印、多個 圖紙嵌套打印 、與 網頁合并打印 等。

          顯示功能

          鳥瞰、放大鏡、視區平移、縮放、視區旋轉、鷹眼、 透明顯示 、背景、水印、網格、回溯顯示、最佳顯示、顯示/隱藏工具條、瀏覽模式、 分屏顯示 、矢量線、矢量圓、 動畫 、動態標注、疊加對比顯示等。

          圖元支持

          主要實體有:直線,圓弧,Polyline,樣條線,圓,橢圓,橢圓弧,IMAGE,點,塊引用,外部塊參照,射線,云線,文本,多行文本,對齊標注,旋轉標注 ,半徑標注,直徑標注,角度標注,OLE對象,布局,視口,圖層,線型,文字樣式,命名字典,標注, 自定義實體 ,代理實體, 反應器 等。主要編輯有:移動,夾點拉伸,偏移,刪除,復制,粘貼,旋轉,縮放,鏡向,離散,圖案填充,實心填充,打碎,計算曲線長,面積,最jin點,交點,導角, 文字變線條 等。

          編輯支持

          移動、夾點拉伸、偏移、刪除、復制、粘貼、旋轉、縮放、鏡向、離散、圖案填充、實心填充、打碎、計算曲線長、面積、最近點、交點、倒角、文字變線條等。

          幾何運算

          面積,夾角,向量,矩陣,旋轉,縮放,最進點,最進距離,垂足,參數,鏡向,平移,交點,打斷,延伸, 最短路徑最長路徑

          支持事件

          鼠標事件鍵盤事件 ,選擇修改,夾點編輯,打圖紙完成,命令開始,命令執行完成,視區變化,動態提示,動態繪制,超連接點擊,對象修改,命令執行,進度條變動,系統變量修改,控件初始化完成,等事件。


          主站蜘蛛池模板: 久久亚洲一区二区| 国产午夜精品一区二区三区小说| 精品国产日产一区二区三区| 亚洲一区二区三区AV无码| 亚洲国产精品一区二区第一页| 国产一区二区三区不卡在线观看 | 国产成人综合亚洲一区| 国产伦理一区二区| 日本夜爽爽一区二区三区| 国产精品538一区二区在线| 亚洲综合一区国产精品| 精品国产福利一区二区| 中文字幕亚洲一区二区va在线| 亚洲乱码一区二区三区国产精品 | 精品一区二区三区在线成人| 变态拳头交视频一区二区 | 国产微拍精品一区二区| 久久亚洲一区二区| 国产精品久久久久一区二区三区| 无码一区二区三区中文字幕| 一区在线免费观看| 成人精品一区久久久久| 精品国产一区二区三区av片| 久久一本一区二区三区| 中文字幕在线无码一区二区三区| 亚州日本乱码一区二区三区| 中文字幕一区二区三区在线播放| 日韩最新视频一区二区三| 无码人妻精品一区二区蜜桃网站| 亚洲av日韩综合一区久热| 亚洲熟女乱综合一区二区| 在线精品亚洲一区二区三区| 亚洲视频在线一区二区三区| 午夜影视日本亚洲欧洲精品一区 | 国产一区二区三区电影| 国内精品无码一区二区三区| 国产精品无码一区二区三区在| 中文字幕一区二区三区日韩精品| 麻豆一区二区免费播放网站| 亚洲一区二区三区久久久久| 日韩精品无码一区二区三区|