首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用API实现web搜索的自动化

不使用API实现web搜索的自动化
EN

Stack Overflow用户
提问于 2020-07-06 18:31:42
回答 1查看 281关注 0票数 1

我试图从这个网站中自动提取一组值的信息。我有一个开始端口和目标端口的列表,例如THEODOSIAKERCH,我需要提取每个起始目的地组合的计算距离、速度和天数。请有人建议如何在Python中实现这一点吗?另一个潜在的障碍是我列表中的端口有“短名”,例如THEODOSIA,它代表Port of Theodosia, Ukraine。当你在搜索中输入THEODOSIA时,网站提供了一个自动完成的建议,所以这对于手动搜索来说是可以的。但是,我不确定这在自动搜索中是如何工作的。

我对网络抓取/搜索完全缺乏经验,所以在阅读了几篇在线文章后开始编写下面的代码,但是已经到了死胡同,我的代码没有任何用处。

代码语言:javascript
复制
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
from webdriver_manager.chrome import ChromeDriverManager
import requests

#Example start and destination port values
df = pd.DataFrame({'StartPort':['THEODOSIA', 'ROSTOV'], 'DestinationPort':['KERCH', 'MARSEILLE']})

r = requests.get('http://ports.com/sea-route/')
soup = BeautifulSoup(r.content, 'html.parser')
rows = soup.findAll('tr', {"class": "span-7 prepend-top"})

startport = []
for a in soup.findAll('a',href=True, attrs={'class':"span-7 prepend-top"}):
    startport=a.find('div', attrs={'class':"span-7 title ac_input"})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 19:34:50

您可以使用他们的API获得完整的端口名。然后用这些名字来获取海上的距离、速度和日数。

例如:

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup


from_ = 'Theodosia'
to_ = 'Kerch'

find_port_url = 'http://ports.com/aj/findport/'
route_url = 'http://ports.com/aj/sea-route/'

def find_port(port_name):
    return requests.get(find_port_url, params={'q': port_name, 'limit': 1}).text.split('|')[0]

def find_route(f, t):
    data = requests.get(route_url, params={'a':0, 'b':0, 'c': f.split(',')[0], 'd': t.split(',')[0]}, headers={'X-Requested-With': 'XMLHttpRequest'}).json()
    return data['cost']['nauticalmiles'], data['default_speed'], data['days_at_sea']


f = find_port(from_)
t = find_port(to_)

nm, speed, days = find_route(f, t)
print('Distance: {} nm Speed: {} Days at sea: {:.1f}'.format(nm, speed, days))

指纹:

代码语言:javascript
复制
Distance: 70 nm Speed: 10 Days at sea: 0.3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62762316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档