前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python来背单词

用python来背单词

作者头像
赵云龙龙
发布2021-01-28 15:57:46
9430
发布2021-01-28 15:57:46
举报
文章被收录于专栏:python爱好部落python爱好部落

最近一直在练习英语,感觉水平还是没多大提升,词汇量太少了。 找了好久,也没有让我满意的学单词的地方,终于在新东方上找到了词典。 各种单词都有https://www.koolearn.com/dict/tag_2697_1.html 但是只是列出了单词,单词的翻译要一个一个去查,太慢了。用有道词典去取词,有的时候要么取不到,要么只有一部分,也不是很方便。 于是我想用python爬虫来弄。 爬虫很简单。

可以用xpath来获取

代码语言:javascript
复制
#获取所有word标签
xpath_items = '//a[@class="word"]'
#对每个word标签再提取
xpath_link = './@href'
xpath_title = './text()'

爬虫代码如下:

代码语言:javascript
复制
import requests
from lxml import etree


#请求头和目标网址
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36'
}
url = 'https://www.koolearn.com/dict/tag_2697_2.html'

#第二种写法的 xpath
#获取所有 li标签
xpath_items = '//a[@class="word"]'
#对每个 li标签再提取
xpath_link = './@href'
xpath_title = './text()'


#获取和解析网页
r = requests.get(url, headers=headers,verify=False)
r.encoding = r.apparent_encoding
dom = etree.HTML(r.text)

#获取所有的文章标签
items = dom.xpath(xpath_items)


#分别对每一个文章标签进行操作 将每篇文章的链接 标题 评论数 点赞数放到一个字典里
words = []
for article in items:
    t = {}

    t['title'] = article.xpath(xpath_title)[0]
    if t['title']:
        # t['translate']=translate(t['title'])
        #t['translate'] = bing_translate(t['title'])
        t['translate'] = youdao_translate(t['title'])
    t['link'] = "https://www.koolearn.com"+article.xpath(xpath_link)[0]
    words.append(t)

如果想将每个单词自动查出来的话,可以用有道翻译的API。我随便在网上找了一段代码,省得自己动手去写。

代码语言:javascript
复制
import urllib.request
import urllib.parse
import json
import re
def translate(content):
    # 翻译地址
    request_url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    # data参数
    data = {'i': content,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': '15944508027607',
            'sign': '598c09b218f668874be4524f19e0be37',
            'ts': '1594450802760',
            'bv': '02a6ad4308a3443b3732d855273259bf',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME',
            }
    # headers参数
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
    # 将data规范化
    data = urllib.parse.urlencode(data)
    # 转为字节型
    data = bytes(data, 'utf-8')
    # 创建请求
    request = urllib.request.Request(request_url, data, headers=headers)
    # 发送请求并获取相应
    response = urllib.request.urlopen(request)
    # 返回内容,得到一个json字符串
    html = response.read().decode('utf-8')
    # 将json字符串转为字典
    html = json.loads(html)
    print(html['translateResult'][0][0]['tgt'])
    return html['translateResult'][0][0]['tgt']

然后我存到excel里

代码语言:javascript
复制
import pandas as pd
df =pd.DataFrame(data=words)
# 读取所有Sheet
df1 = pd.read_excel("C:\\work\\english.xlsx", sheet_name=None)
index=len(list(df1))
sheetname="Sheet{}".format(index+1)
writer = pd.ExcelWriter('test_excel.xlsx')
df.to_excel(writer,sheet_name=sheetname)
writer.close()

效果是这样的。

这样学习的时候,一目了然,想看自己记没有的时候,可以将翻译那列隐藏起来。 检查了一下用有道API翻译的效果,只是有些单词翻译不太准,如果想查仔细一点,就可以打开后面的连接。 但是这样用有一个问题,这个接口是限制次数的。用过几次之后,发现怎么都不给我翻译了。然后找了百度翻译API也是如此。 看来白嫖不是那么容易的事情。

后面查了一下,有说可以用bing的接口。

代码语言:javascript
复制
def bing_translate(content):
    url = "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=A4D660A48A6A97CCA791C34935E4C02BBB1BEC1C&from=&to=zh&text={}".format(content)
    result = requests.get(url,verify=False)
    print(content)

    reg = ">(.*?)<"
    word = re.search(reg, result.text)
    print(word.group(1))
    return word.group(1)

使用起来太慢,而且很多都不给翻译。 最后还是用了有道,没有注册的那种:

代码语言:javascript
复制
def youdao_translate(content):

    url = "http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i={}".format(
            content)
    result = requests.get(url, verify=False)
    result=result.json()
    print(result['translateResult'][0][0]['tgt'])
    return result['translateResult'][0][0]['tgt']

终于白嫖成功。 这样每次只需要指定这个网站的单词页面的URL,就可以批量捞取单词了。 学一段时间看看,会不会有长进。 这里面还有一个问题,新页面存储的总是把原来的给覆盖掉,怎么写到excel新的sheet中,下回再讲。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档