使用scrapy框架查找网站中的前5个常用词

时间:2018-12-30 12:45:46

标签: python scrapy web-crawler

我可以通过获取页​​面内容并查找文本表单页面来找出没有scrapy的前5个常用词。然后将出现的单词数倒入字典中。

但是我想利用刮擦的工具来做到这一点。但是我不确定该将字典保存在项目中的什么位置,以便Spider可以将数据发送到普通地方然后更新该字典。

如何使用scrapy查找常见的单词?
我可以使用scrapy的统计信息收集模块,以便在完成搜寻后可以打印统计信息吗?

1 个答案:

答案 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})