爬虫爬取英文考研词汇


这是该网站http://www.kuakao.com/english/ch/39183.html的英语词汇链接起始.
安全起见,我们先查看网站的robots协议,可以看到并没有限制我们爬取词汇页面。

分析发现,词汇部分开头是用<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)
尝试运行,从返回的结果来看,网页内容能够正常显示中文字符,也自动进行了排版。

接下来我们需要提取网页中词汇的部分,使用Beautifulsoup的find方法查找class=artTxt的div,返回的结果中,我们发现除了英文词汇还有其余不想要的内容,这是由于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按照功能细分一下,总共两个方法就可以实现完整步骤了:
- get_englist_word()
- write_word_to_file(word_list)

最终文件中效果图是长这样的:[图片上传失败...(image-c1ea62-1528535865293)]
到此为止,我们的程序就写完了。最后总结一下,写爬虫的code的时间其实很少,主要是对于要爬取内容的解析和清洗工作占用了大部分时间,以及后期的优化工作,这样也能锻炼我们分析解决问题的能力。
附录:源代码
由于本人自身能力有限,code还有很多有待改进之处,欢迎大家指点建议,也希望大家能多多包涵。
如果大家喜欢这篇文章,还请大家点个赞,算是对我的鼓励,谢谢!