这个爬虫非常简单,但是里面主要是通过结巴分词,pip3 install jieba
,将泰戈尔的《飞鸟集》
从网站上获取飞鸟集后,将文档进行逐行过滤,最终生成题目和答案两个文档。
'''
飞鸟集(泰戈尔)
'''
import scrapy
import re
import jieba
import random
from pyquery import PyQuery as pq
class FeiNiaoSpider(scrapy.Spider):
name = "feiniao"
start_urls = [
"http://www.eywedu.net/taigeer/002(1).htm",
]
def parse(self, response):
soup = pq(response.body_as_unicode())
content = soup('div.Section1 td:eq(1) p').text()
lines = content.split(' ')
valids = self.filter_invalid(lines)
# w+,表示每次都会覆盖文件。
timu_file = open('../files/timu.txt','w+')
daan_file = open('../files/daan.txt','w+')
for para in valids:
self.rw_file(para,timu_file,daan_file)
# 不要忘了关掉文件
timu_file.close()
daan_file.close()
def filter_invalid(self, lines):
valids = []
# 先过滤长度小于6
lines = list(filter(lambda s:len(s)>6, lines))
for line in lines:
if re.search('\n',line):
valids.extend(line.split('\n'))
else:
valids.append(line)
# 根据长度排序,字少的简单一些,对小朋友来说就容易造句了。
valids.sort(key=lambda i:len(i),reverse=False)
return valids
def rw_file(self,para,timu_file,daan_file):
c = jieba.cut(para,cut_all=True)
e = " ".join(c)
f = e.split(" ")
# 这个将分词进行随机打乱。
random.shuffle(f)
h = ' '.join(f)
# 将题目和答案写到对应的文档里面曲。
timu_file.writelines(h+"\n\n\n\n")
daan_file.writelines(para+"\n\n\n\n")
最终的结果是