当前位置:首页 » 编程软件 » 知乎的脚本

知乎的脚本

发布时间: 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上面有一个人的关于知乎爬虫的博客,找不到链接了

热点内容
加工中心手动编程 发布:2025-05-09 15:59:59 浏览:927
sql查询父节点所有子节点 发布:2025-05-09 15:53:19 浏览:640
佣金宝密码忘了怎么办 发布:2025-05-09 15:53:19 浏览:626
为什么安卓手机进入不了敏捷家园 发布:2025-05-09 15:53:14 浏览:586
web服务器python 发布:2025-05-09 15:49:50 浏览:179
爬虫需要自己搭建服务器吗 发布:2025-05-09 15:28:48 浏览:108
sqldeclarevarchar 发布:2025-05-09 15:15:27 浏览:362
算法是正交 发布:2025-05-09 15:13:06 浏览:851
php环境搭建wamp 发布:2025-05-09 15:08:43 浏览:911
手机存储显示不出来 发布:2025-05-09 15:05:21 浏览:924