注意:考虑使用Pastebin's API 和Pastebin's scraping API。
您的证书验证失败(proxy/tor/vpn/web 没有证书/错误配置的 web?)。如果您仍想继续,只需将verify=False as an argument 用于requests.post():
requests.post(url="...", verify=False)
如果您使用的是 VPN,也许您已经获得了您机器的根证书,您可以使用 cert=("path to cert", "path to key") 应用它。
如果您使用的是 Tor,最好跳过该电路并重新创建一个新电路。
对于代理来说,它很复杂,可能是证书问题,也可能只是配置错误/损坏。
您可以通过检查您的网络会话(特定于操作系统)和环境变量requests 包works with 来验证没有使用代理:
http_proxy
HTTP_PROXY
https_proxy
HTTPS_PROXY
curl_ca_bundle
编辑:我刚刚重新检查了 Pastebin,RAW 文本选项仅适用于未受保护的粘贴。但是,您可以通过检查流量来获取 HTML 版本,然后只需保持会话、检查网络选项卡中的 cookie 和标头即可使用代码重新组装它。你应该得到这样的东西:
import requests as r
ses = r.Session()
cookie = ses.get("https://pastebin.com").cookies["_csrf-frontend"]
# The missing step here is reworking the provided CSRF by client-side
# JS which is "hidden" in the minified jquery.min.js (or at least the
# `POST` is issued by it). Once you have it, you can put it to the
# data field
print(ses.post(
url='https://pastebin.com/<your paste>',
headers={
'User-Agent': "<user agent to spoof it's via Requests>",
'Accept': (
'text/html'
',application/xhtml+xml'
',application/xml'
';q=0.9,image/webp,*/*;q=0.8'
),
'Accept-Language': 'en-US,en;q=0.5',
'Content-Type': 'application/x-www-form-urlencoded'
},
data=(
'_csrf-frontend=<JS-manipulated CSRF value>'
'&is_burn=1'
'&PostPasswordVerificationForm%5Bpassword%5D=<pass>'
)
).text)
之后只需检查带有RAW 的标签,然后通过一些快速的正则表达式 (obligatory "it's a stupid idea" post) 或使用不易出错的解决方案(例如 BeautifulSoup)对其进行解析。
尽管如此,验证码、IP 黑名单、“聪明的”CSRF 处理和类似的东西最终会阻止你进行这种抓取,如果不是这样,在 Angular 中组装一个会动态更改其类名、标签名等的应用程序就太容易了只是为了弄乱你对 lulz 的抓取(Google Docs 喜欢这个东西,个人经验),所以如果你打算用它做一些严肃的事情,只需使用 API。
Edit2:关于抓取 / 为什么使用 API 的次要常见问题解答
- 如果网站在其 ToS 中不允许抓取或禁止抓取,则不应这样做。虽然人们大多忽略它,但从非匿名设备/IP 上做这件事并不聪明,尤其是如果有一个从中赚钱的想法,因为那时人们开始寻找(甚至合法地)。
- 不,Tor 将无法工作,尤其是因为一旦进入其中就充满了验证码。
- 是的,任何至少有一点阅读服务器日志能力的人都可以弄清楚你将要做什么,并通过 IP、用户代理阻止你,或者只是通过提供随机数据来惹你生气(这样做,是稍后查看交通日志很有趣:D)
- 是的,甚至 VPN 和代理也可以被阻止,就像使用 Tor 一样,只有它们会记录活动并让你付费
- Pastebin 更改抓取流程的任何部分后,您就可以从头开始重新发明它