我可以通过获取页面内容并查找文本表单页面来找出没有scrapy的前5个常用词。然后将出现的单词数倒入字典中。
但是我想利用刮擦的工具来做到这一点。但是我不确定该将字典保存在项目中的什么位置,以便Spider可以将数据发送到普通地方然后更新该字典。
如何使用scrapy查找常见的单词?
我可以使用scrapy的统计信息收集模块,以便在完成搜寻后可以打印统计信息吗?
答案 0 :(得分:1)
我以前从未使用过scrapy,但是我认为我有一种解决方案,可以计算HTML正文中的所有单词。
在名为words_spider.py
的文件中,输入以下代码:
from collections import Counter
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/tag/humor/',
]
def parse(self, response):
for text in response.xpath('//body//*//text()').extract():
# Eliminate empty strings
words_ = (item.strip() for item in text.strip().split(' '))
words = [item for item in words_ if item]
if any(words):
yield Counter(words)
然后在另一个名为scrapy_runner.py
的文件中放入以下代码:
import os
import subprocess
import shlex
import json
from functools import reduce
from operator import add
from collections import Counter
from pprint import pprint
FILENAME = 'counters.json'
SCRIPTNAME = 'words_spider.py'
try:
os.remove(FILENAME)
except FileNotFoundError:
pass # No file to remove
# Run the spider.
subprocess.check_call(shlex.split(f'scrapy runspider {SCRIPTNAME} -o {FILENAME}'))
with open(FILENAME) as fh:
# Create counters out of saved JSON file.
counts = (Counter(item) for item in json.load(fh))
# Add all the counters together.
pprint(reduce(add, counts), indent=4)
运行脚本:python scrapy_runner.py
:
输出为:
Counter({'humor':12, 'by':11, '(大约)':10, '标签:':10, 'a':7 '你':7, '至':6, 'in':6, '和':6 '是':5 '思考':5 'the':4, ““”:3, '是':3, '必须':3, 可以:3, '行情':2, '它':2, '或':2, '谁':2, “书籍”:2 '明喻':2, “思考”:2 '坐':2, 'make':2 '那':2, 'of':2 '旁观者':2, “时间”:2 “巧克力”:2 '查尔斯':2, '正确':2, “。”:2 '人民':2, 'with':2, “仅”:2 '我':2, '真相':2, “抓取”:1 “登录”:1, “查看”:1 '标签:':1, “人”:1 '绅士':1, “女士”:1 '有':1, '不':1, '高兴':1, “好”:1 “小说”:1, “无法忍受”:1, “愚蠢”。:1 简(Jane):1 '奥斯丁':1, '特长':1, '经典':1, ““ A”:1 '日':1, '无':1, '阳光':1, “赞”:1 “知道”:1 “晚上。”:1 '史蒂夫':1, '马丁':1, “明显”:1 “任何人”:1, '教堂':1, '基督徒':1, “也”:1, '车库':1, “汽车”。:1, '驻军':1, 'Keillor':1, '宗教':1, ““美容”:1, '眼睛':1, '5月1日, “必要”:1 '来自':1, '给':1, '愚蠢':1, “误传”:1 '黑色':1 “眼睛”。:1 '吉姆':1, “亨森”:1 ““全部”:1, '需要':1, “爱”:1 '但是':1, '小':1, '现在':1, '那么':1, “不”:1 “伤害。”:1 'M。':1 '舒尔茨':1, '食物':1, ““记住”,1, “我们”:1 “疯狂”:1 “爱”:1 'so':1, “是”:1 '全部':1, '接吻':1, '我':1, “随时”:1 '感觉':1, '喜欢':1, '苏珊娜':1, '柯林斯':1, ““某些”:1 '从不':1, '去':1, “疯狂”:1 '什么':1, '真正':1, '可怕':1, '生活':1, '他们':1, “线索”。:: 1 '布科夫斯基':1, “麻烦”:1, “具有”:1 'an':1 '开放':1, '介意':1, “课程”:1 '将':1, '坚持':1, '上':1, “即将到来”:1 '沿':1, “尝试”:1 'put':1 “事物”:1, “特里”:1 'Pratchett':1, '思想开放':1, “思考”:1 ““思考”:1, '左':1, '低':1, “高”:1 '哦':1, '上':1, '如果':1, “尝试!”:1 '博士':1, '苏斯':1, '哲学':1 '原因':1, '对话':1, '我自己':1, '因为':1, “我”:1 '一个':1, '谁':1, “答案”:1, “接受”。:1 乔治(George):1 卡林(Carlin):1 '疯狂':1, '谎言':1, '说谎':1, “自我放纵”:1, '下一个':1, '→':1, '顶部':1, '十':1, '标签':1, '爱':1, “鼓舞人心”:1 '生活':1, “阅读”:1 “友谊”:1, “朋友”:1, 'by:':1, “ GoodReads.com”:1 “制造”:1 '❤':1, 'Scrapinghub':1})