所以我试着为同义词库制作一个python脚本。我是一名学生,我将用它写文章等,以节省时间时,换词。到目前为止,我已经能够用我想要的搜索词打开thesaurus.com,但我似乎不知道如何复制前5个返回的单词,并将它们放在列表中,然后打印出来。
在这一点上,我已经检查了youtube和google。我也尝试过搜索堆栈溢出,但是它没有多大帮助,所以我请求帮助-- please.This是我的代码的样子:
import webbrowser as wb
import antigravity
word = str(input()).lower()
returned_words_list = []
url = 'https://www.thesaurus.com/browse/{}'.format(word)
wb.open(url, new=2)我只想让它在此时将returned_words_list打印到控制台。到目前为止,我甚至无法让它自动从网站上得到单词。
发布于 2019-07-28 07:35:35
要在标记中找到结果,我需要依赖于属性数据-linkid。
import requests
from bs4 import BeautifulSoup
word = str(input()).lower()
url = 'https://www.thesaurus.com/browse/{}'.format(word)
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
result = soup.select('li > span > a[data-linkid]')[:5]
for link in result:
print(link.string)import requests
from lxml import etree
word = str(input()).lower()
url = 'https://www.thesaurus.com/browse/{}'.format(word)
response = requests.get(url)
tree = etree.HTML(response.text)
result = tree.xpath('//li/span/a[@data-linkid]')[:5]
for link in result:
print(link.text)从长远来看,解析并不是最好的方法,我会考虑免费的REST服务,比如http://thesaurus.altervista.org/。
发布于 2019-07-28 11:01:07
查看网页流量,页面会对一个返回结果的不同的url进行请求。您可以使用该端点和几个头来获得json格式的所有结果。然后,查看@Martijn (+ to他)的this答案,只要您使用生成器,就可以限制来自itertools的islice迭代。当然,你也可以从清单的理解中分一杯羹。结果按similarity的降序返回,这在这里特别有用,因为您得到了具有最高相似度的单词。
发生器
import requests
from itertools import islice
headers = {'Referer':'https://www.thesaurus.com/browse/word','User-Agent' : 'Mozilla/5.0'}
word = str(input()).lower()
r = requests.get('https://tuna.thesaurus.com/relatedWords/{}?limit=6'.format(word), headers = headers).json()
if r['data']:
synonyms = list(islice((i['term'] for i in r['data'][0]['synonyms']), 5))
print(synonyms)
else:
print('No synonyms found')列表理解
import requests
headers = {'Referer':'https://www.thesaurus.com/browse/word','User-Agent' : 'Mozilla/5.0'}
word = str(input()).lower()
r = requests.get('https://tuna.thesaurus.com/relatedWords/{}?limit=6'.format(word), headers = headers).json()
if r['data']:
synonyms = [i['term'] for i in r['data'][0]['synonyms']][:5]
print(synonyms)
else:
print('No synonyms found')发布于 2019-07-28 06:56:28
正如注释所提到的,BeautifulSoup (bs4)是一个很好的库。您可以使用bs4解析整个页面,然后对所需的元素进行区域分析。首先是包含单词的ul元素,然后是包含单词的a元素。
import requests
from bs4 import BeautifulSoup
word = "hello"
url = 'https://www.thesaurus.com/browse/{}'.format(word)
r = requests.get(url)
returned_words_list = []
soup = BeautifulSoup(r.text, 'html.parser')
word_ul = soup.find("ul", {"class":'css-1lc0dpe et6tpn80'})
for idx, elem in enumerate(word_ul.findAll("a")):
returned_words_list.append(elem.text.strip())
if idx >= 4:
break
print (returned_words_list)https://stackoverflow.com/questions/57238440
复制相似问题