如何将抓取脚本转换为Web服务?

时间:2019-04-30 19:29:38

标签: python selenium web-scraping beautifulsoup

我想构建一个接受字符串并返回html代码的api。

这是我想要作为网络服务的抓取代码。

  

代码

from selenium import webdriver
import bs4
import requests
import time

url = "https://www.pnrconverter.com/"
browser = webdriver.Firefox()
browser.get(url)
string = "3 PS 232 M 03FEB 7 JFKKBP HK2 1230A 420P 03FEB E 
PS/JPIX8U"
button = 
browser.find_element_by_xpath("//textarea[@class='dataInputChild']")
button.send_keys(string) #accept string
button.submit()
time.sleep(5)
soup = bs4.BeautifulSoup(browser.page_source,'html.parser')
html = soup.find('div',class_="main-content") #returns html
print(html) 

任何人都可以告诉我最好的解决方案,将我的代码包装为api / web服务。

3 个答案:

答案 0 :(得分:1)

通常没有最佳的解决方案,因为解决方案必须适合问题和可用资源。

现在看来,您似乎正在尝试包装其他人的网站。如果这是您实际上要解决的问题,并且想获得荣誉,那么您可能应该将人们转发到他们的网站。让您的网站在标题的302 Redirect字段中返回一个Location及其URL。

如果您想做的是从您已硬编码的一次样本检查中获得响应,并使结果可用,我建议您将其放在nginx后的静态文件中。

如果您要使用他们的后端将您的行程转换为可以返回的响应,则可以使用他们的后端API(一旦可用)进行此操作。阅读文档,使用requests库击中所需的API端点,并返回JSON结果,并将其格式化为您想要的格式。

如果您试图通过使自己成为中间人来复制他们的网站,那可能是非法的,您应该重新考虑您的工作。

出于托管目的,您需要弄清楚API被点击的频率。您可能可以很容易地从Heroku开始,也可以根据需要扩展。您可能希望将WebObj或Flask或类似的东西放在打算托管此应用程序的网站上。您可以使用它们来处理我认为对您希望使用其API的字符串的简单请求。

答案 1 :(得分:0)

我是PNR Converter的所有者,因此,我可以为您尝试从我们的网站抓取内容提供一些帮助。不幸的是,不建议从PNR Converter刮取。我们正在开发一种API,它看起来很适合您的需求,并且应该在不久的将来准备就绪。如果您通过网站与我们联系,如果您希望合法使用PNR Converter,我们将很乐意与您合作。 PNR Converter每年至少获得一次完整的更新,因此,我们会定期更改所有代码。我们还将监视对我们站点的所有请求,并且我们将阻止任何被认为不当使用的请求。我们的过滤器已经将您的IP地址(以250.144结尾)用作潜在的滥用行为。

就像我说的那样,如果您希望在PNR Converter上合法地与我们合作,而不是刮擦我们的内容,那么我们将很乐意这样做!请继续检查https://www.pnrconverter.com/api-introduction,以获取与我们的API相关的信息。

我们将在本周末发布后端升级,它将具有不同的HTML结构和动态命名的元素,这将对网络抓取工具造成严重影响!

答案 2 :(得分:-1)

听起来好像需要打印(HTML),然后才可以将代码保存为json格式。我已经用python php / hybrid做过类似的事情。基本上,我们会将数据另存为JSON。然后,任何在网络上打开该站点的尝试都将获得该数据/ api 200!