gpt4 book ai didi

javascript - 接收预请求而不是想要的请求

转载 作者:行者123 更新时间:2023-11-30 20:39:15 25 4
gpt4 key购买 nike

下面的函数对以下链接执行一个简单的请求:
http://patorjk.com/software/taag/#p=display&f=Graffiti&t=test

我只想得到那些大 ACSII 字母中的测试消息“test”。

但是,出于某种原因,我要查找的输出文本 不在协议(protocol)中保存的 HTML 代码中。如果我复制并粘贴链接并检查 HTML 代码而不是使用 Google Chrome,则输出文本是可见的。

我似乎只收到尚未生成正文部分的预请求。如何获得生成output_text 的“正确”HTML 源代码?

下面是:

  1. Python 代码
  2. 通过请求收到的 HTML 代码
  3. 通过 chrome 手动检查页面时的 HTML 代码

1。 Python代码

from bs4 import BeautifulSoup
import requests

def scrape():
"""Scrape from http://patorjk.com

Crucial section looks like:

<pre id="taag_output_text" style="float:left;" class="fig" contenteditable="true">
STRING STRING STRING STRING
STRING STRING STRING STRING
</pre>
"""

URL = "http://patorjk.com/software/taag/#p=display&f=Graffiti&t=TEST"

with requests.Session() as c:
source = c.get(URL)

soup = BeautifulSoup(source.text, "lxml")

with open("protocol.txt", "w") as file:
file.write(soup.prettify())

text = soup.find("pre", id_="taag_output_text")

if not(text):
print("Error: output text not found.")

return text

2。通过请求的 HTML 代码

  <div id="maincontent">
<div id="outputFigDisplay">
</div>

3。人工检查HTML代码

<div id="maincontent">
<div id="outputFigDisplay" class="fig">
<pre id="taag_output_text" style="float:left;" class="fig" contenteditable="true"> __ __
_/ |_ ____ _______/ |_
\ __\/ __ \ / ___/\ __\
| | \ ___/ \___ \ | |
|__| \___ >____ > |__|
\/ \/
</pre>
<div style="clear:both"></div>
</div>
</div>

最佳答案

如评论中所述,文本由客户端的 js 生成,因此无法使用 requestsbs4 抓取它,但您可以使用运行 js 的客户端,例如 selenium :

from selenium import webdriver

url = "http://patorjk.com/software/taag/#p=display&f=Graffiti&t=TEST"
driver = webdriver.Firefox()
driver.get(url)
element = driver.find_element_by_id("taag_output_text")
text = element.text
driver.close()

print(text)

或者,您可以从 http://www.network-science.de/ascii/ 获得相同的 ASCII 艺术,无需使用 selenium

import requests
from bs4 import BeautifulSoup

url = "http://www.network-science.de/ascii/ascii.php?TEXT=TEST&FONT=graffiti&RICH=no&FORM=left&STRE=no&WIDT=80"
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
text = soup.find_all('pre')[1].text

print(text)

两种方法产生相同的结果:

______________________ ____________________
\__ ___/\_ _____// _____/\__ ___/
| | | __)_ \_____ \ | |
| | | \/ \ | |
|____| /_______ /_______ / |____|
\/ \/

关于javascript - 接收预请求而不是想要的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com