當前位置:首頁 » 編程軟體 » 知乎的腳本

知乎的腳本

發布時間: 2023-03-24 03:21:44

❶ 怎樣用python設計一個爬蟲模擬登陸知乎

給你一個例子,可以看看:

import requests
import time
import json
import os
import re
import sys
import subprocess
from bs4 import BeautifulSoup as BS

class ZhiHuClient(object):

"""連接知乎的工具類,維護一個Session
2015.11.11

用法:

client = ZhiHuClient()

# 第一次使用時需要調用此方法登錄一次,生成cookie文件
# 以後可以跳過這一步
client.login("username", "password")

# 用這個session進行其他網路操作,詳見requests庫
session = client.getSession()
"""

# 網址參數是賬號類型
TYPE_PHONE_NUM = "phone_num"
TYPE_EMAIL = "email"
loginURL = r"http://www.hu.com/login/{0}"
homeURL = r"http://www.hu.com"
captchaURL = r"http://www.hu.com/captcha.gif"

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Host": "www.hu.com",
"Upgrade-Insecure-Requests": "1",
}

captchaFile = os.path.join(sys.path[0], "captcha.gif")
cookieFile = os.path.join(sys.path[0], "cookie")

def __init__(self):
os.chdir(sys.path[0]) # 設置腳本所在目錄為當前工作目錄

self.__session = requests.Session()
self.__session.headers = self.headers # 用self調用類變數是防止將來類改名
# 若已經有 cookie 則直接登錄
self.__cookie = self.__loadCookie()
if self.__cookie:
print("檢測到cookie文件,直接使用cookie登錄")
self.__session.cookies.update(self.__cookie)
soup = BS(self.open(r"http://www.hu.com/").text, "html.parser")
print("已登陸賬號: %s" % soup.find("span", class_="name").getText())
else:
print("沒有找到cookie文件,請調用login方法登錄一次!")

# 登錄
def login(self, username, password):
"""
驗證碼錯誤返回:
{'errcode': 1991829, 'r': 1, 'data': {'captcha': '請提交正確的驗證碼 :('}, 'msg': '請提交正確的驗證碼 :('}
登錄成功返回:
{'r': 0, 'msg': '登陸成功'}
"""
self.__username = username
self.__password = password
self.__loginURL = self.loginURL.format(self.__getUsernameType())
# 隨便開個網頁,獲取登陸所需的_xsrf
html = self.open(self.homeURL).text
soup = BS(html, "html.parser")
_xsrf = soup.find("input", {"name": "_xsrf"})["value"]
# 下載驗證碼圖片
while True:
captcha = self.open(self.captchaURL).content
with open(self.captchaFile, "wb") as output:
output.write(captcha)
# 人眼識別
print("=" * 50)
print("已打開驗證碼圖片,請識別!")
subprocess.call(self.captchaFile, shell=True)
captcha = input("請輸入驗證碼:")
os.remove(self.captchaFile)
# 發送POST請求
data = {
"_xsrf": _xsrf,
"password": self.__password,
"remember_me": "true",
self.__getUsernameType(): self.__username,
"captcha": captcha
}
res = self.__session.post(self.__loginURL, data=data)
print("=" * 50)
# print(res.text) # 輸出腳本信息,調試用
if res.json()["r"] == 0:
print("登錄成功")
self.__saveCookie()
break
else:
print("登錄失敗")
print("錯誤信息 --->", res.json()["msg"])

def __getUsernameType(self):
"""判斷用戶名類型
經測試,網頁的判斷規則是純數字為phone_num,其他為email
"""
if self.__username.isdigit():
return self.TYPE_PHONE_NUM
return self.TYPE_EMAIL

def __saveCookie(self):
"""cookies 序列化到文件
即把dict對象轉化成字元串保存
"""
with open(self.cookieFile, "w") as output:
cookies = self.__session.cookies.get_dict()
json.mp(cookies, output)
print("=" * 50)
print("已在同目錄下生成cookie文件:", self.cookieFile)

def __loadCookie(self):
"""讀取cookie文件,返回反序列化後的dict對象,沒有則返回None"""
if os.path.exists(self.cookieFile):
print("=" * 50)
with open(self.cookieFile, "r") as f:
cookie = json.load(f)
return cookie
return None

def open(self, url, delay=0, timeout=10):
"""打開網頁,返回Response對象"""
if delay:
time.sleep(delay)
return self.__session.get(url, timeout=timeout)

def getSession(self):
return self.__session

if __name__ == '__main__':
client = ZhiHuClient()

# 第一次使用時需要調用此方法登錄一次,生成cookie文件
# 以後可以跳過這一步
# client.login("username", "password")

# 用這個session進行其他網路操作,詳見requests庫
session = client.getSession()

❷ 如何屏蔽知乎里的視頻

在chome應用商店找到這個adblock,安裝這個腳本就行了。

腳本(Script),是使用一種特定的描述性語言,依據一定的格式編寫的可執行文件。

使用腳本

1、當執行腳本時,計算機會執行一連串的操作。這些操作可能只涉及 Illustrator,也可能涉及其他應用程序,如文字處理、電子表格和數據管理程序。Illustrator 可支持多種腳本環境,且內含標準的腳本組合。用戶也可使用自己的腳本,並將這些腳本加入「腳本」子菜單中。

2、執行腳本

可以選擇「文件、腳本」命令,然後從子菜單中選取一個腳本。也可以選擇「文件、腳本、其他腳本」命令,然後搜尋要執行的腳本。

3、安裝腳本

將腳本復制到計算機的硬碟中。如果將腳本放置到 Adobe Illustrator 應用程序文件夾內的預設腳本文件夾中,那麼腳本將會顯示在「文件、腳本」子菜單中。如果將腳本放置在硬碟的其他位置上,則可以使用「文件、腳本、其他腳本」命令來執行 Illustrator 中的腳本。



❸ 知乎 linux命令和shell腳本的區別

准確上講應該說是
shell
腳本文件編程(當然了,在該
shell
腳本文件中也可以包含
linux
系統命令)。shell
腳本文件是一個文本文件,它是將你需要完成的各種復雜功能通過編寫
shell
程序來實現。例如:模式匹配(awk)
、字元串替換功能(sed)等。在
awk

sed
等工具的使用中肯定需要使用正則表達式的熟練使用,而
linux
命令是指
linux
系統的基本操作命令,例如:ls
列出文件名命令、cat
filename、cd
改變子目錄命令等等。這就是它們之間的區別。

❹ 給知乎寫了個調用 MathJax 來顯示 LaTeX 公式的腳本,大家看看效果如何

題主說的寫個腳本,可我沒看到你的腳本啊,自然沒法評判,更不會知道效果怎樣了。那我們還是來了解這兩個名詞含義吧,有助於以後在類似問題上找出答案來的。

還要很多呢,這里就說這幾個,需要的可以上網查找。

❺ 油猴腳本:關閉知乎自動登錄彈框及外鏈自動跳轉

在查資料的時候經常會搜到知乎的鏈接,但是每次進入後都會彈出登錄框, 每次都需要手動點擊關閉, 再次從知乎點擊跳出的外鏈也會彈出安全跳轉提示,每次也都需要手動去點擊,甚是繁瑣.
於是自己編寫了這個油猴腳本,如果需要可拿去使用, 有問題請及時反饋.

❻ Python爬取知乎與我所理解的爬蟲與反爬蟲

關於知乎驗證碼登陸的問題,用到了Python上一個重要的圖片處理庫PIL,如果不行,就把圖片存到本地,手動輸入。

通過對知乎登陸是的抓包,可以發現登陸知乎,需要post三個參數,一個是賬號,一個是密碼,一個是xrsf。
這個xrsf隱藏在表單裡面,每次登陸的時候,應該是伺服器隨機產生一個字元串。所有,要模擬登陸的時候,必須要拿到xrsf。

用chrome (或者火狐 httpfox 抓包分析)的結果:

所以,必須要拿到xsrf的數值,注意這是一個動態變化的參數,每次都不一樣。

拿到xsrf,下面就可以模擬登陸了。
使用requests庫的session對象,建立一個會話的好處是,可以把同一個用戶的不同請求聯系起來,直到會話結束都會自動處理cookies。

注意:cookies 是當前目錄的一個文件,這個文件保存了知乎的cookie,如果是第一個登陸,那麼當然是沒有這個文件的,不能通過cookie文件來登陸。必須要輸入密碼。

這是登陸的函數,通過login函數來登陸,post 自己的賬號,密碼和xrsf 到知乎登陸認證的頁面上去,然後得到cookie,將cookie保存到當前目錄下的文件裡面。下次登陸的時候,直接讀取這個cookie文件。

這是cookie文件的內容

以下是源碼

運行結果:

https://github.com/zhaozhengcoder/Spider/tree/master/spider_hu

反爬蟲最基本的策略:

爬蟲策略:
這兩個都是在http協議的報文段的檢查,同樣爬蟲端可以很方便的設置這些欄位的值,來欺騙伺服器。

反爬蟲進階策略:
1.像知乎一樣,在登錄的表單裡面放入一個隱藏欄位,裡面會有一個隨機數,每次都不一樣,這樣除非你的爬蟲腳本能夠解析這個隨機數,否則下次爬的時候就不行了。
2.記錄訪問的ip,統計訪問次數,如果次數太高,可以認為這個ip有問題。

爬蟲進階策略:
1.像這篇文章提到的,爬蟲也可以先解析一下隱藏欄位的值,然後再進行模擬登錄。
2.爬蟲可以使用ip代理池的方式,來避免被發現。同時,也可以爬一會休息一會的方式來降低頻率。另外,伺服器根據ip訪問次數來進行反爬,再ipv6沒有全面普及的時代,這個策略會很容易造成誤傷。(這個是我個人的理解)。

通過Cookie限制進行反爬蟲:
和Headers校驗的反爬蟲機制類似,當用戶向目標網站發送請求時,會再請求數據中攜帶Cookie,網站通過校驗請求信息是否存在Cookie,以及校驗Cookie的值來判定發起訪問請求的到底是真實的用戶還是爬蟲,第一次打開網頁會生成一個隨機cookie,如果再次打開網頁這個Cookie不存在,那麼再次設置,第三次打開仍然不存在,這就非常有可能是爬蟲在工作了。

反爬蟲進進階策略:
1.數據投毒,伺服器在自己的頁面上放置很多隱藏的url,這些url存在於html文件文件裡面,但是通過css或者js使他們不會被顯示在用戶看到的頁面上面。(確保用戶點擊不到)。那麼,爬蟲在爬取網頁的時候,很用可能取訪問這個url,伺服器可以100%的認為這是爬蟲乾的,然後可以返回給他一些錯誤的數據,或者是拒絕響應。

爬蟲進進階策略:
1.各個網站雖然需要反爬蟲,但是不能夠把網路,谷歌這樣的搜索引擎的爬蟲給幹了(幹了的話,你的網站在網路都說搜不到!)。這樣爬蟲應該就可以冒充是網路的爬蟲去爬。(但是ip也許可能被識破,因為你的ip並不是網路的ip)

反爬蟲進進進階策略:
給個驗證碼,讓你輸入以後才能登錄,登錄之後,才能訪問。

爬蟲進進進階策略:
圖像識別,機器學習,識別驗證碼。不過這個應該比較難,或者說成本比較高。

參考資料:
廖雪峰的python教程
靜覓的python教程
requests庫官方文檔
segmentfault上面有一個人的關於知乎爬蟲的博客,找不到鏈接了

熱點內容
Ap6510dn如何配置 發布:2024-03-29 00:38:47 瀏覽:332
安卓和蘋果哪個更佔用內存 發布:2024-03-29 00:37:02 瀏覽:423
編譯錯誤算bug嗎 發布:2024-03-29 00:23:03 瀏覽:33
c語言干什麼 發布:2024-03-29 00:05:35 瀏覽:314
香港中轉伺服器搭建 發布:2024-03-29 00:05:16 瀏覽:673
安卓手機怎麼在桌面上顯示鍾表 發布:2024-03-28 23:48:22 瀏覽:5
分析代碼能編譯嗎 發布:2024-03-28 23:48:16 瀏覽:767
c語言與易語言 發布:2024-03-28 23:46:25 瀏覽:588
ai壓縮腳本 發布:2024-03-28 23:41:10 瀏覽:988
危化品的存儲 發布:2024-03-28 23:02:09 瀏覽:608