2019实战第二期-并发实战打卡

题目:

用并发写一个小程序,获取有道翻译上的单词意思,比如 单词china
爬取url:http://dict.youdao.com/w/eng/china/
输出的数据结构:单词的名称,单词的发音,单词的内容。例如
{'Word': 'china','Proc': '', 'Desc':''}

提示:大家可以多线程,也可以用线程池(ThreadPoolExcutor)

代码思路:
1、先写一个函数去下载http://dict.youdao.com/w/eng/china/
2、然后解析这个页面,解析可以用pyquery,这个库非常好用,大概只要几行代码可以解析
3、然后用多线程去处理上面的task

from pyquery import PyQuery as pq
import requests
import threadpool


def download_html(word):
    output = {'Word': word}
    final_output = {}
    url = 'http://dict.youdao.com/w/eng/{}/'.format(word)
    try:
        r = requests.get(url)
        if r.status_code == 200:
            doc = pq(r.text)
            final_output = decode_html(doc, output)
            print(final_output)
    except Exception as e:
        print('抓取页面异常,抓取不到:' + word)
        return None
    return final_output


def decode_html(doc, output):
    output['Proc'] = ''
    output['Desc'] = ''
    for pro in doc.items('.baav .pronounce'):
        output['Proc'] = output['Proc'] + pro.text()

    for li in doc.items('#phrsListTab .trans-container ul li'):
        output['Desc'] = output['Desc'] + li.text()
    return output


word_list = ['china', 'nice', 'python', 'beautiful', 'girl']
pool = threadpool.ThreadPool(10)
word_pool = threadpool.makeRequests(download_html, word_list)
[pool.putRequest(req) for req in word_pool]
pool.wait()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,196评论 4 61
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,803评论 0 10
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,821评论 0 8
  • 践行第39天《说说你所理解的奢华和传承》 今天的题目蛮有意思的,我分两部分来说。 一、奢华 每个人生活需要解决衣食...
    天刀笑剑钝阅读 216评论 0 0
  • 今天看电视剧《大宅门》,有一个很有意思的片段。白景琦嫌弃一个想来京补实缺的外地官不懂规矩,便捉弄他,把他的衣服骗走...
    行走的牡蛎阅读 236评论 0 1