gpt4 book ai didi

Python:如何填写网络表单并获取结果页面源代码

转载 作者:行者123 更新时间:2023-12-01 06:59:03 24 4
gpt4 key购买 nike

我正在尝试写一个python将抓取 http://www.fakenewsai.com/ 的脚本并告诉我一篇新闻文章是否是假新闻。我希望脚本将给定的新闻文章输入到网站的 url 中输入字段并点击 submit按钮。然后,我想抓取网站以确定该文章是网站上显示的“假”新闻还是“真实”新闻。

我使用 selenium 成功完成了此任务和ChromeDriver ,但脚本非常慢(>2 分钟)并且没有在 Heroku 上运行(使用 flask )。作为引用,这是我使用的代码:

from selenium import webdriver
import time

def fakeNews(url):
if url.__contains__("https://"):
url = url[8:-1]
if url.__contains__("http://"):
url = url[7:-1]
browser = webdriver.Chrome("static/chromedriver.exe")
browser.get("http://www.fakenewsai.com")
element = browser.find_element_by_id("url")
element.send_keys(url)
button = browser.find_element_by_id("submit")
button.click()
time.sleep(1)
site = "" + browser.page_source
result = ""
if(site[site.index("opacity: 1")-10] == "e"):
result = "Fake News"
else:
result = "Real News"
browser.quit()
return result

print(fakeNews('https://www.nytimes.com/2019/11/02/opinion/sunday/instagram-social-media.html'))

我尝试使用其他 python 复制此代码库,例如 mechanicalsoup , pyppeteer ,和scrapy 。然而,作为python的初学者,我还没有发现太大的成功。我希望有人能通过解决方案为我指明正确的方向。

最佳答案

出于所述目的,我认为分析网站、了解其功能,然后自动化浏览器行为而不是用户行为会更简单。

尝试在网站上按浏览器上的 F12,打开“网络”选项卡,将 URL 粘贴到输入框中,然后单击“提交”,您将看到它发送一个 HTTP OPTIONS 请求,然后向该 URL 发送一个 POST 请求。然后,服务器返回 JSON 响应作为结果。

因此,您可以使用 Python 的请求模块 ( docs ) 来自动执行 POST 请求,而不必使用非常复杂的代码来模拟点击并抓取结果。

您可以构建的一个非常简单的示例是:

import json
import requests


def fake_news():
url = 'https://us-central1-fake-news-ai.cloudfunctions.net/detect/'
payload = {'url': 'https://www.nytimes.com/'}
headers = {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'en-US,en;q=0.5',
'Connection': 'keep-alive', 'Content-Length': '103', 'Content-type': 'application/json; charset=utf-8',
'DNT': '1', 'Host': 'us-central1-fake-news-ai.cloudfunctions.net', 'Origin': 'http://www.fakenewsai.com',
'Referer': 'http://www.fakenewsai.com/', 'TE': 'Trailers',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'}

response_json = requests.post(url, data=json.dumps(payload), headers=headers).text
response = json.loads(response_json)
is_fake = int(response['fake'])

if is_fake == 0:
print("Not fake")
elif is_fake == 1:
print("Fake")
else:
print("Invalid response from server")


if __name__ == "__main__":
fake_news()

PS:联系网站所有者讨论在您的项目中使用他或她的基础设施是公平的。

关于Python:如何填写网络表单并获取结果页面源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58713597/

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