gpt4 book ai didi

python - 在支持 POSTing 的情况下呈现不带 Selenium 的 JSON/Javascript 后从网页中抓取 HTML

转载 作者:太空狗 更新时间:2023-10-30 00:19:13 25 4
gpt4 key购买 nike

我正在尝试使用以下代码,它工作正常,但它不会让 JavaScript 首先运行,这意味着我没有从网页中获取所需的 HTML。

我看过 DryScrape,但据我所知,它不支持发布,就像您在 auto_login() 函数中看到的那样, PyQt4 也是如此。

有问题的网站有 4 位的 JSON“列表”?在加载/呈现时形成页面;如果我查看源代码,它不能很好地显示并且我无法轻易地找到其中的内容,但是如果我在页面上“检查元素”,HTML 看起来很完美,然后我可以使用 BeautifulSoup< 轻松查看它.

我知道我可以使用 Selenium,但这不是我想做的,主要是因为希望它在后台运行,我可以使用 PhantomJSPyVirtualDisplay 来执行此操作,但这只是最后的手段。

import requests
from bs4 import BeautifulSoup

HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'}
SESSION = requests.session()
RESPONSE = requests.Response

email = "mail@mail.com"
pass = "password123"

def auto_login():
global RESPONSE
url = "https://website.com/log.php"
payload = {
"log":email,
"pwd":pass,
"finish":"https://website.com/listed/public/gen1/",
}
RESPONSE = SESSION.post(url, data=payload, headers=HEADERS, verify=False)

def process_html():
PROCESSED_HTML = BeautifulSoup(RESPONSE.content, 'html.parser')
return PROCESSED_HTML

def main():
auto_login()
PROCESSED_HTML = get_html()

if __name__ == "__main__":
main()

我如何使用我的脚本(已修改)轻松呈现网页的 JavaScript,最好使用 PyQt4(DryScrape 无法在我的 Windows 10 上正确安装,Python 2.7 用于某些原因)而不使用 Selenium

如有任何想法,我们将不胜感激。

最佳答案

我无法让 dryscape 为我工作,所以我无法测试它;但是,我认为这个想法/技巧可能会奏效 - 可能需要进行一些小的调整。

这个想法是您创建一个小型的本地 HTML 文件,其中包含一个表单和您需要传递的参数。此 HTML 文件是用 Python 创建的,因此您可以将值传递给每个参数。

根据文档,dryscrape 可以提交表单,所以你提交你的表单,它应该会把你带到你需要去的地方。

类似于:

import dryscrape

payload = {'log':email, 'pwd':pass, 'finish':'https://website.com/listed/public/gen1/'}

html = '''
<form action="https://website.com/log.php" method="POST">
<input name="log" type="text" value="{log}">
<input name="pwd" type="password" value="{pwd}">
<input name="finish" type="text" value="{finish}">
<input type="submit">
</form>
'''.format(**payload)

with open('./temp.html','w') as hf:
hf.write(html)

sess = dryscrape.Session(base_url = './') # maybe 'file://' is needed?

q = sess.visit('/temp.html')
q.form().submit()

# Remainder of your code to follow...

同样,我无法自行测试,因此可能需要进行一些小的调整。

不是很优雅,但只是一个想法...:-)

关于python - 在支持 POSTing 的情况下呈现不带 Selenium 的 JSON/Javascript 后从网页中抓取 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117358/

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