美文网首页
爬虫爬取英文考研词汇

爬虫爬取英文考研词汇

作者: 程序员Morgan | 来源:发表于2018-06-09 17:19 被阅读0次
    今年打算复习考在职研究生,这几天开始背诵考研单词,在网上查找英语考研必备词汇,发现都是长这样的: image 每一页的点击太费时费力了。因此萌生了为什么不能用爬虫把单词爬下来保存在本地呢?说干咱就干。首先点开搜索中的某个网页,分析网页的结构,找到其中的规律。例如,我找的是跨考考研的网站: image

    这是该网站http://www.kuakao.com/english/ch/39183.html的英语词汇链接起始.

    安全起见,我们先查看网站的robots协议,可以看到并没有限制我们爬取词汇页面。 image 接下来使用chrome浏览器,右键点击view page source(ctrl-U),也可以选择inspect(ctrl+shift+I),找到对应的词汇部分, image

    分析发现,词汇部分开头是用<div class="artTxt">开始的。接下来就开始我们的coding过程了。我们程序使用的是python3, 系统是ubuntu,IDE选择的是pycharm,主要是pycharm可以在线调试,简单方便。
    先实现爬取网页的过程:

    import requests
    try:
        base_url = 'http://www.kuakao.com/english/ch/39183.html'
        r = requests.get(base_url)
        print(r.content)
    except Exception as e:
        print(e)
    

    写完以后运行,从结果来看,我们成功获取到了该网页的内容,但是内容不够友好,会有一些xb9\xe4\xba\x8e这种字符,并没有显示中文内容,这里修改一下编码格式,增加一行code:

    r.encoding = r.apparent_encoding,

    然后增加模拟浏览器登陆,另外从打印结果来看,网页内容没有实现自动排版,这里我们用Beautifulsoup库来优化解析网页内容,优化完的code如下:

    import requests
    from bs4 import BeautifulSoup
    try:
        base_url = 'http://www.kuakao.com/english/ch/39183.html'
        headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'}
        r = requests.get(base_url, headers=headers)
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.content, 'lxml')
        print(soup)
    except Exception as e:
        print(e)
    
    尝试运行,从返回的结果来看,网页内容能够正常显示中文字符,也自动进行了排版。 image

    接下来我们需要提取网页中词汇的部分,使用Beautifulsoupfind方法查找class=artTxtdiv,返回的结果中,我们发现除了英文词汇还有其余不想要的内容,这是由于find方法会按照我们的要求从开始查找, 找到结果以及后面的所有内容都会包含。这需要我们利用code来进行筛选,将尾巴去掉,只保留词汇部分。Beautifulsoup具体的使用方法在这里不做过多的概述了,放两个链接给大家:

    BeautifulSoup官方文档中文版
    静觅的博客关于BeautifulSoup用法

    学习爬虫迟早要学Beautifulsoup和正则表达式的,建议大概了解一下用法。

    通过Beautifulsoup解析网页内容,拿到词汇以后,我们需要将其保存在文件中。保存文件的code如下:

    with open('word.txt', 'w') as f:
        f.write(word)
        f.write('\n')
    

    文章开头的时候我们只是分析了第一页的内容,翻阅下去以后发现一共有66页内容,因此我们将url拆分一下:

     base_url = 'http://www.kuakao.com/english/ch/39' + str(183 + page) + '.html'
    

    改成通过遍历方式,可以抓取到每个网页的结构内容。

    将code按照功能细分一下,总共两个方法就可以实现完整步骤了:

    1. get_englist_word()
    2. write_word_to_file(word_list)
    最后为了能够让我们在运行爬虫程序的时候有所反馈,我增加了进度条的功能,使用了tqdm第三方库,效果如下: image

    最终文件中效果图是长这样的:[图片上传失败...(image-c1ea62-1528535865293)]

    到此为止,我们的程序就写完了。最后总结一下,写爬虫的code的时间其实很少,主要是对于要爬取内容的解析和清洗工作占用了大部分时间,以及后期的优化工作,这样也能锻炼我们分析解决问题的能力。

    附录:源代码

    由于本人自身能力有限,code还有很多有待改进之处,欢迎大家指点建议,也希望大家能多多包涵。

    如果大家喜欢这篇文章,还请大家点个赞,算是对我的鼓励,谢谢!

    相关文章

      网友评论

          本文标题:爬虫爬取英文考研词汇

          本文链接:https://www.haomeiwen.com/subject/vnoteftx.html