面试题(3)--爬虫

来源:互联网 发布:php curl 无法提交 编辑:程序博客网 时间:2024/06/07 00:51

请完成一个程序,并能按步骤实现以下功能:

  1. 下载https://en.wikipedia.org/wiki/Machine_translation 页面的内容并保存为mt.html

    需要编写代码来下载页面。

  2. 统计mt.html中

    标签内下所有单词以及数目并存储到mt_word.txt中。

    mt_word.txt有如下几点要求:

    a) 每个单词一行。单词在前,单词出现的次数在后,中间用Tab(\t)进行分隔。

    b) 单词要按照单词数目从多到少的顺序进行排列。比如说单词a出现了100次,单词b出现了10次,则单词a要在单词b的前面。

  3. 提取出mt.html中所有的年份信息(比如说页面中的1629, 1951这些的四位数字就是年份)存储到mt_year.txt中。

    mt_year.txt有如下几点要求:

    a) 每个年份是一行。

    a) 年份需要从过去到现在的顺序进行排列。比如说文章中出现了2007和1997,则1997需要排在2007的前面。

要求:

  1. 仅限python编程,而且仅仅可以使用python自带的函数或库。

  2. 提交可执行的程序以及mt.html, mt_word.txt, mt_year.txt。

  3. 限定在一个小时内完成。

# -*- coding: utf-8 -*-"""-------------------------------------------------   File Name:     requests_spider   Description :   开发环境为Windows10+python3.6.1   Author :       Victor   date:          2017/9/16-------------------------------------------------   Change Activity:                   2017/9/16:-------------------------------------------------"""import reimport requestsfrom lxml import etreeif __name__ == '__main__':    # 1 使用requests第三方库,获取网页内容保存为mt.html。    response = requests.get(url="https://en.wikipedia.org/wiki/Machine_translation")    with open('mt.html', 'wb') as f:        f.write(response.content)    # 2 提取所有p标签下的文本内容,拼接为一个字符串    p_list = etree.HTML(response.content).xpath("//p/text()")    string_p = ''.join(p_list)    # 3 截取出每一个单词,以单词为键,出现次数为值存入字典中    word_dirt = {}    for word in string_p.split():        # 去除单词前后的符号,(全部转换成小写,具体看需求)        word = word.strip(''',.:'()""/;''').lower()        if not word_dirt.__contains__(word):            word_dirt[word] = 1        else:            word_dirt[word] += 1    # 4 存入mt_word.txt文件中    with open('mt_word.txt', 'w') as f:        # 对word_dirt进行排序得到一个列表,然后遍历列表,将内容写入文件中        for word_num in sorted(word_dirt.items(), key=lambda item: item[1], reverse=True):            line = ('%s\t%s' % (word_num[0], word_num[1])) + '\n'            f.write(line)    # 5 提取出mt.html中所有的年份信息(比如说页面中的1629, 1951这些的四位数字就是年份)存储到mt_year.txt中    num_year = re.compile(r'\d{4}')  # 可优化    num_list = re.findall(num_year, str(response.content))    num_list = list(set(num_list))  # 去重    num_list.sort()  # 排序  注意:sort()是没有返回值的    with open('mt_year.txt', 'w')as f:        for year_num in num_list:            # 逐条保存            f.write(year_num + '\n')