计算页面上的字数

时间:2017-12-13 13:14:01

标签: python-3.x scrapy

如何废弃任何网站并搜索给定的字词并显示其发生的次数

class LinkedinScraper(scrapy.Spider):
    name = "linked"

    def start_requests(self):
        urls = ['https://www.linkedin.com/']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'linkedin.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

1 个答案:

答案 0 :(得分:0)

您可以将{regex与response.body一起使用来查找任何地方的所有出现事项

 import re 

 r = re.findall('\\bcat\\b', "cat catalog cattering") 
 print(len(r), 'cat(s)')

提供"1 cat(s)",而不是"3 cat(s)"

如果您只在某些代码中需要字词,那么您首先使用response.css()response.xpath()等。

编辑:

显示如何使用的示例

 re.findall(pattern, response.text) 

但它也可以在标签内找到文字。

它还显示了如何使用

response.css('body').re(pattern)

'view'上计算'\\bviews\\b''\d+ views'Stackoverflow并显示前三个元素

您可以在不创建项目的情况下运行它。

import scrapy
import re

class MySpider(scrapy.Spider):

    name = 'myspider'

    start_urls = ['https://stackoverflow.com/']

    def parse(self, response):
        print('url:', response.url)

        for pattern in ['view', '\\bviews\\b', '\d+ views']:
            print('>>> pattern:', pattern)

            result = re.findall(pattern, response.text) 
            print('>>>          re:', len(result), result[0:3])

            result = response.css('body').re(pattern)
            print('>>> response.re:', len(result), result[0:3])

# --- it runs without project and saves in `output.csv` ---

from scrapy.crawler import CrawlerProcess

c = CrawlerProcess({'USER_AGENT': 'Mozilla/5.0'})
c.crawl(MySpider)
c.start()