上一篇文章金山翻译爬取(基础篇)讲到爬取金山翻译,并且实现了简单词汇的爬取,但是我们的报错信息都是一长串字符,就像这样

当然这个报错还是很容易看懂的,“列表索引超出范围”,但是我们将它输入到之前写的小程序中,会出现什么情况呢?

可以看到,并不能输出具体翻译,原因是在函数中的异常处理中获取到了异常,导致不能输出,至于具体原因,我们可以通过浏览器检查元素的方法查看一下。

我们可以看到红色框框中的便签属性与我们之前的正则表达式匹配字符串有所不同,而这也导致我们不能从页面中提取到有效信息。所以,对于词汇和句子的翻译,网页给出的HTML文本不同,我们使用的正则表达式也应该有所变化。

首先,我们和之前一样,编译两个正则字符串,并分别赋给priginal_sentence和sentence_translation,分别匹配原查询内容和释义。然后同样使用try/except异常处理解决无法翻译的错误输入。在except中,输入出错信息后,重新调用主函数,便于出错后重新输入查询内容。

然后和之前一样用拼接方法构建url,在调用函数过程中,先调用了parse_word_page()函数,也就是先判断输入的内容是不是个词汇,如果是,则输出词汇的词性词义。如果不是,则返回出错信息,并在异常信息输出后调用parse_sentence_page()函数,判断是否是一个长句,如果是,则会输出金山给出的翻译,如果不是,则表示输入的内容金山不能翻译,在浏览器测试可知,如果随意输入一串字符,金山翻译会返回至首页,也就是主函数中的base_url,而我们则通过在parse_sentence_page()函数的异常处理中重新调用主函数,返回至查询时刻。

接下来,我们便可以做到翻译句子了,也就可以翻译报错信息了!

我们可以看到,不管是中英文的单词还是句子,都能很好的翻译出来了,可以去浏览器上检查一下,是不是和网页上一样呢?

代码如下:

import requests

import re

def get_page(url):

try:

response = requests.get(url,timeout=10)

response.raise_for_status()

response.encoding = response.apparent_encoding

return response.text

except:

print('Failed')

return None

def parse_word_page(html):

'''解析词汇的信息块'''

original_word = re.compile(r'

(.*?)',re.S)

word_translation = re.compile(r'

(.*?)',re.S)

try:

original_input = re.findall(original_word,html) # 输出查询的内容

print(original_input[0].strip())

except:

print('Sorry,word is not found.')

print(''.center(30,'='))

parse_sentence_page(html) # 出错后调用parse_sentence_page()函数

items = re.findall(word_translation,html) # 匹配各词义

for item in items:

part = re.compile(r'(.*?)',re.S)

meanings = re.compile(r'(.*?)')

print(re.findall(part,item)[0]) # 输出词性

meaning = re.findall(meanings,item)

for i in range(len(meaning)):

print(meaning[i]) # 输出词义

print(''.center(30,'=')) # 分割线

def parse_sentence_page(html):

'''如果输入的是个句子,调用函数'''

original_sentence = re.compile(r'

(.*?)

',re.S)

original_input = re.findall(original_sentence,html)

try:

original_input = re.findall(original_sentence,html)

print(original_input[0].strip())

except:

print('Sorry,sentence is not found.')

print(''.center(30,'='))

print('Please make sure that your input is incorrect.')

main() # 重新调用主函数

items = re.findall(sentence_translation,html)

print(items[0])

print(''.center(30,'='))

def main():

while True:

url = ''

base_url = 'http://www.iciba.com/'

content = input('Please input what you want to check(input q to exit):')

print(content)

if content == '':

print('Input cannot be null') # 输入为空时重新输入

continue

elif content == 'q':

break #输入'q'退出查询

else:

url = base_url + content

print(url)

html = get_page(url)

parse_word_page(html)

if __name__ == '__main__':

main()

python发短信 金山_Python爬虫基础练习(四) 金山翻译爬取(进阶篇)相关推荐

  1. python发短信验证码_python利用第三方模块,发送短信验证码

    对于初学者,如何利用第三方python开发包发送短信验证码,下面是具体的实现和记录过程! 环境:虚拟机上centos7平台,python3.7版本: 首先,申请账号的部分就省略了 1. 获得appid ...

  2. python发短信脚本_python自动发送短信

    Twilio是一个SMS (Short Message Service)网关服务,可以通过程序发送短信. 首先,注册Twilio服务,网址:https://www.twilio.com/. 完成后,会 ...

  3. python发短信脚本_python脚本发送短信

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. python发送短信内容_Python实现发短信的方法介绍(附代码)

    本篇文章给大家带来的内容是关于Python发短信的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. #首先注册互亿无线,然后复制发短信界面右上角的apiid和apik ...

  5. 爬虫系列(四)--全站爬取

    爬虫系列(四)--全站爬取 全站爬取需要的数据基于一个这样的假设:某网站的页面上存在该网站其他页面的连接,通过这些连接跳转的新的页面进行数据的爬取.在开始这个之前,要先明白栈和队列.本篇中介绍的是单线 ...

  6. python发送短信接口_python发送短信和发送邮件

    先注册好 发短信脚本内容 #接口类型:互亿无线触发短信接口,支持发送验证码短信.订单通知短信等. #账户注册:请通过该地址开通账户http://sms.ihuyi.com/register.html ...

  7. python发短信(容联云)

    python容联云发短信验证码 根据容联云的接口说明配置Django+Redis全套视频教程(含项目实战)_达内Python进阶教学视频--学习笔记 import datetime import ha ...

  8. 利用Python发短信

    #首先注册互亿无线,然后复制发短信界面右上角的apiid和apikey更换代码中的account和password #APIID:1 #APIKEY: a9 #接口类型:互亿无线触发短信接口,支持发送 ...

  9. 知乎python练手的_Python—爬虫之初级实战项目:爬取知乎任一作者的文章练手

    爬虫之初级实战项目:爬取知乎任一作者的文章练手 在正式上代码之前,先过一遍之前所学知识的框架内容,温故而知新!!! 接下来我们直接上代码,一定要手敲代码.手敲代码.手敲代码!!! import req ...

最新文章

  1. c hello world_世界上最难的 5 种编程语言!C/C++竟不在其列,它们到底是谁?
  2. win8 -telnet安装
  3. SAP Spartacus delivery mode continue button单元测试失败原因分析
  4. 程序员崩溃的40个瞬间!!!
  5. 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
  6. android权限适配 简书,Android动态权限适配
  7. pandas to_sql
  8. vue 数据劫持 响应式原理 Observer Dep Watcher
  9. Python覆盖率分析工具_Coverage
  10. Python程序员培训计划
  11. 水平居中和transform: translateY(-50%) 实现元素垂直居中效果
  12. 移动端和网页端公告栏文字右向左轮播滑动
  13. 编写程序求解百鸡百钱问题。公鸡5元一只,母鸡3元一只,小鸡一元3只,问100元钱买100只鸡,可买公鸡、母鸡、小鸡各多少只?
  14. android虚拟按键趋势,为什么Android虚拟按键老被吐槽但却有厂商坚持在做?
  15. pads查看pcb软件
  16. linux中解压rar文件
  17. EasyExcel实现表格导入导出
  18. 派大星的面试题以及解决
  19. B - Pond Cascade Gym - 101670B
  20. Ducky Debugging(字符串输入)题解

热门文章

  1. BTC100白新学堂——货币流通的双重巧合
  2. 程序员该如何去写自己的简历-代码而成的简历
  3. js 对比json数据
  4. MySQL高级篇知识点——其它数据库日志
  5. 2021重庆江北中学高考成绩查询,重庆市江北中学校2021年排名
  6. http://www.dewen.net.cn/q/16007/mysql查询如何先排序再分组呢
  7. 深度 | AI芯片终极之战
  8. tomcat7.x 点击\bin\tomcat7.exe一闪而过,点击tomcat7w.exe提示未安装服务
  9. ## 微信web开发者工具网络连接失败解决办法,基本百分百成功
  10. PIXHAWK2.4.8飞控如果做双罗盘校准