首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中从网页中复制信息

如何在python中从网页中复制信息
EN

Stack Overflow用户
提问于 2019-07-28 06:18:55
回答 3查看 7.8K关注 0票数 1

所以我试着为同义词库制作一个python脚本。我是一名学生,我将用它写文章等,以节省时间时,换词。到目前为止,我已经能够用我想要的搜索词打开thesaurus.com,但我似乎不知道如何复制前5个返回的单词,并将它们放在列表中,然后打印出来。

在这一点上,我已经检查了youtube和google。我也尝试过搜索堆栈溢出,但是它没有多大帮助,所以我请求帮助-- please.This是我的代码的样子:

代码语言:javascript
复制
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打印到控制台。到目前为止,我甚至无法让它自动从网站上得到单词。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-28 07:35:35

要在标记中找到结果,我需要依赖于属性数据-linkid。

  1. 基于BeautifulSoup的第一种方法
代码语言:javascript
复制
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)
  1. 第二个基于lxml的
代码语言:javascript
复制
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/

票数 0
EN

Stack Overflow用户

发布于 2019-07-28 11:01:07

查看网页流量,页面会对一个返回结果的不同的url进行请求。您可以使用该端点和几个头来获得json格式的所有结果。然后,查看@Martijn (+ to他)的this答案,只要您使用生成器,就可以限制来自itertoolsislice迭代。当然,你也可以从清单的理解中分一杯羹。结果按similarity的降序返回,这在这里特别有用,因为您得到了具有最高相似度的单词。

发生器

代码语言:javascript
复制
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')

列表理解

代码语言:javascript
复制
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')
票数 1
EN

Stack Overflow用户

发布于 2019-07-28 06:56:28

正如注释所提到的,BeautifulSoup (bs4)是一个很好的库。您可以使用bs4解析整个页面,然后对所需的元素进行区域分析。首先是包含单词的ul元素,然后是包含单词的a元素。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57238440

复制
相关文章

相似问题

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