爬虫抓取了想要的文本之后,接下来就是对爬虫爬取的所有文本进行自然语言处理。在这里提供两个思路。
1.直接在爬虫文件中添加自然语言处理的函数,功能是对爬取的文章进行自然语言处理。
2.先保存爬虫爬取的所有文件到一个指定的文件夹,新建一个自然语言处理程序进行遍历所有的文件夹中的文本,然后打开相应的文本进行处理。
两种方法无所谓好坏,看个人需求吧。我是偏向在爬虫中添加,简单快捷,不容易出错。
一些基本过程可以参考:
AI&BigData four:使用scrapy爬取网站,按照指定的格式存入txt文本的详细过程复盘:
https://blog.youkuaiyun.com/weixin_41931602/article/details/80336601
自然语言处理爬过的坑:使用python结巴对中文分词并且进行过滤,建立停用词。常见的中文停用词表大全
https://blog.youkuaiyun.com/weixin_41931602/article/details/80430380
自然语言处理爬过的坑:使用python遍历所有的文件夹中的所有文本.标准库OS的常用函数总结大全
https://blog.youkuaiyun.com/weixin_41931602/article/details/80458740
自然语言处理爬过的坑:基于爬虫抓取的语料,使用gensim建设dictionary、corpus、tfidf_model并保存成文件
https://blog.youkuaiyun.com/weixin_41931602/article/details/80458852
自然语言处理函数版块的思路具体如下:
读取一篇文章,然后做分词,过滤,加入词典,利用词典把分词结果构建成bow,把bow放进语料列表。
这是一篇文章的处理流程,所有文章都这么处理一遍,就可以把最后的词典和语料列表保存
然后把这个词典和语料输入到tfidf模型中训练就可以得到模型文件了
接下来是第一种方法爬虫程序的所有代码:
# -*- coding: utf-8 -*-
# !/usr/bin/python
import scrapy
import time
import os
import jieba
import codecs
from bs4 import BeautifulSoup
from scrapy.http import Request
from baichuan2.items import Baichuan2Item
from gensim import corpora
from gensim import models
from collections import defaultdict
base =r"C:\Users\ME\Desktop\Python project\pachong\scrapy\baichuan2/"
class InsuranceSpider(scrapy.Spider):
name = 'insurance'
allowed_domains = ['insurance.cngold.org/']
bash_url = 'http://insurance.cngold.org/'
def start_requests(self):
#构造不同板块的url
base = ['jgdt/','gsdt/','cxdt/']#调试时候记得改数字,加快调试效率
big_shuzu = []
for i in range(3):
url = self.bash_url + base[i]
# print url
yield Request(url,self.parse,meta={'big_shuzu':big_shuzu})#调用parse函数
def parse(self, response):
big_shuzu = response.meta['big_shuzu']
items = [] # 创建一个空列表,用来存储匹配到的数据
website_name = response.css('h1 a span::text').extract_first()#大板块的名字
# print website_name
big_name = response.css('.title h2::text').extract_first() # 小版块的名字
# print big_name
first_url = response.css('.fl a[class]::attr(href)').extract_first() # 小版块的url
# print first_url
file_name = base + website_name
# 创建主目录
if (not os.path.exists(file_name)):
os.makedirs(file_name)
second_file_name = file_name + '/' + big_name # 创建副目录
if (not os.path.exists(second_file_name)):
os.makedirs(second_file_name)