纯英语单词可以从下面几个网址下载(第3个和第4个为博主上传到CSDN的文件):
我将下载好的英文单词列表存放到阿里云服务器,文件结构与爬虫所在目录结构如图1与图2所示。并使用如下所示的Python代码,对于每个单词分别爬取Bing在线词典所給出的释义。
import urllib.request
def grab(url, filename, num):
resp = urllib.request.urlopen(url)
data = resp.read()
name = "/home/crawler/" + str(num) + ".txt"
file_name = open(name, "wb")
file_name.write(data)
file_name.close()
print("Job done.")
def getFileName(num):
path = "/home/non_alphabetical/result" + str(num) + ".txt"
with open(path) as f:
lines = f.readlines()
return lines
if __name__ == '__main__':
for cnt in range(0, 21):
lines = getFileName(cnt)
for line in lines:
EnglishWord = line.rstrip()
print(EnglishWord)
web_addr = "https://cn.bing.com/dict/search?q=" + str(EnglishWord) + "&qs=n&form=Z9LH5&sp=-1&pq=" + str(EnglishWord) + "&sc=8-8&sk=&cvid=AA1C8A024F484889A4B788484086A7DF" #input("请输入要抓取的网址:")
try:
grab(web_addr, EnglishWord, cnt)
except:
print("Wrong URL")
因为有些单词不在Bing在线词典的数据库里面,因此搜素不到其单词释义,对应爬取到的页面源代码的文件容量较小,经观察为:112 KB,使用如下Linux指令删除容量小于112 KB的文件即可(具体做法是新建delete_invalid_file.sh文件并将下列命令复制其中)。
while true ;do find /home/crawler -name "*" -type f -size -112k | xargs -n 1 rm -f; done;
为了能够使爬虫和删除指令一直保持运行,需要借助screen,详情参考博文。结合本实验,最终运行的指令分别如下所示(需在两个不同的终端执行,且另一个终端不能使用exit或者CTRL-C终止,你可以直接用鼠标把终端叉掉,哈哈哈!):
screen -s crawler
python3 test1.py
screen -s delete_invalid_file
chmod 777 delete_invalid_file.sh
./delete_invalid_file.sh
最终运行效果如图3所示。
爬取到的忘记是网页文档的形式,包含了大量的HTML标签,后期需要进一步处理才能得到“干净”的数据。