没有输出到所需链接的抓取页面

scraping page with no output to desired links

我想抓取这个网页:

http://protected.to/f-42cbf8ce2521d615

但我必须单击“继续文件夹”才能访问这些链接。我在 HTML 源中看不到这些链接,只有当我实际使用鼠标单击“继续文件夹”按钮时才会看到这些链接。

如何避免通过物理点击访问网站中的这些链接?

我是网络抓取的新手,所以请帮我解决这个问题。

感谢您的关注和时间。

奥祖哈

import requests
from bs4 import BeautifulSoup

s = requests.Session()
url='http://protected.to/f-c9036f7a236b1511'
r = s.get(url)
soup = BeautifulSoup(r.text, features="html.parser")

params = {i['name']:i.get('value') for i in soup.find('div', {'class':'col-md-12 text-center'}).find_all('input')}
headers = {"Host": "protected.to", 
           "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/99.0",
           "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
           "Accept-Language": "en-US,en;q=0.5",
           "Accept-Encoding": "gzip, deflate",
           "Connection":"keep-alive",
           "Cookie": r.headers['Set-Cookie'],
           "Upgrade-Insecure-Requests": "1", 
           "Sec-GPC": "1",
           "DNT": "1"}

print(params)
r_ = s.post(url, headers = headers, cookies = r.cookies, params=params)
print(r_.status_code)

“继续到文件夹”是表单的提交按钮,POST将“__RequestVerificationToken”值和 slug 标记添加到页面以显示文件夹的内容。

因此,理论上 - 您必须解析 http://protected.to/f-42cbf8ce2521d615 中的 HTML 以提取隐藏字段“__RequestVerificationToken”的值,即保存该标记值的输入名称;要获取您需要在标签之间查看的 slug 令牌,您会看到它在加载页面时动态创建了一个 slug 令牌;

一旦你得到那个值,你就必须用令牌和 slug 做一个 POST 到相同的 URL http://protected.to/f-42cbf8ce2521d615,正文的内容会看起来像像这样:__RequestVerificationToken=8BYeNPftVEEivO2imhtWIuWAb0mjhPg-5pAhq1mlpL_pTyYR1AyScbfqB8QZDudwGY_1LkV79FCDgpyffRPuktApd2ZQYBdi2ySA5ATUZ601&鼻涕虫=42cbf8ce2521d615

以上将 return 包含文件夹内容的页面;您可以通过简单地打开开发工具并检查点击 'Continue to Folder' 时发生的情况来复制我上面所说的内容,您可以看到 POST 由内容以及包含项目的页面元素组成需要进行 POST 调用(验证令牌和 slug 令牌)。

您可以使用为表现得像用户 selenium 而编写的复杂库。但我会去简单的 .click() 到按钮然后解析 HTML.

const button = document.querySelector('[value="Continue to folder"]');
button.click();
// Parse the HTML