python 爬虫思想,抓取网站上尽可能多的英文内容文章,去除停用词后,统计频次出现排名前 300~600 的高频词

原创 2018年04月15日 13:54:43

抓取链接

http://www.chinadaily.com.cn/a/201804/14/WS5ad15641a3105cdcf6518417.html

中英文文章及a标签中URL链接中的英文文章,利用这种迭代再迭代的方法获取网站中几乎所有英文文章

import requests
from bs4 import BeautifulSoup
import time
import random
import os

visited_urls = set()
def get_raw_html(url):
if url not in visited_urls:
time.sleep(2)
response = requests.get(url)
visited_urls.add(url)
if response.status_code == 200:
print("url:",url,"okey")
return BeautifulSoup(response.text,"html.parser")
return None

def extract_urls(raw_html):
urls = raw_html.find_all('a')
result = set()
for url in urls:
if url.has_attr('href') and url['href'].startswith('http://www.chinadaily.com.cn/a/'): #匹配开头相等字符串
result.add(url['href'])
return result

def extract_content(raw_html):
content_element = raw_html.find(id='Content')
if content_element != None: #AttributeError: 'NoneType' object has no attribute 'stripped_strings'
result = ''
for text in content_element.stripped_strings:
result = result + '\n' + text
return result

def content_handler(content,raw_html):
h1 = raw_html.find('h1')
if h1 != None:
h1 = h1.get_text() #AttributeError: 'NoneType' object has no attribute 'get_text'
h1 = h1.strip() #OSError: [Errno 22] Invalid argument: './demo-dir/\n Video: Trump orders strikes against Syria\n .txt'
h1 = h1.replace(':',' ')
h1 = h1.replace('?',' ')
print(h1)
if content is not None and content != '\n':
with open('./{0}/{1}.txt'.format("demo-dir", h1),"w",encoding='utf-8') as file: #UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 353: illegal multibyte sequence
file.write(content)
pass

def crawl(url):
print("url:",url,"start")
raw_html = get_raw_html(url)
if raw_html is not None:
urls = extract_urls(raw_html)
content = extract_content(raw_html)
content_handler(content,raw_html)
for other_url in urls:
crawl(other_url)

seed_url = "http://www.chinadaily.com.cn/a/201804/14/WS5ad15641a3105cdcf6518417.html"
crawl(seed_url)


在目录demo-dir下得到抓取到的文章如下:

合并demo-dir目录下所有txt文件:

import os
def plus_text(dir):
#获取目标文件夹的路径
filedir = os.getcwd()+ dir
#获取当前文件夹中的文件名称列表
filenames=os.listdir(filedir)
#打开当前目录下的result.txt文件,如果没有则创建
f=open('total.txt','w')
#先遍历文件名
for filename in filenames:
filepath = filedir+'/'+filename
#遍历单个文件,读取行数
for line in open(filepath,encoding='gb18030',errors='ignore'): #UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 54: illegal multibyte sequence
f.writelines(line)
#关闭文件
f.close()

对合并的total.txt文件进行去','  '('  等等处理:

import os
def article_words_split(content):
result = {}
for line in content:
if line != ' ':
line = article_handle(line)
line = line.strip()
for word in line.split(' '):
word = word.lower() #word.lower() 将字符串转换为小写,返回转换后的字符串
if word in result:
result[word] += 1
else:
result[word] = 1
return result

def article_handle(content):
content = content.replace('(',' ')
content = content.replace(')',' ')
content = content.replace(',',' ')
content = content.replace('"',' ')
content = content.replace('.',' ')
content = content.replace('。',' ')
content = content.replace('$',' ')
content = content.replace('/',' ')
content = content.replace('[',' ')
content = content.replace(']',' ')
content = content.replace('-',' ')
return content

对去停顿号的文章进行统计排序,输出300-600高频的词:

# coding=utf-8
import glob
import article_split
import plus_text
from collections import Counter

# plus_text.plus_text('./demo-dir')
content = open('total.txt','r')
result = article_split.article_words_split(content)

c=Counter(result).most_common() #Counter是字典的子类
print(len(c)) #返回一个列表,按照dict的value从大到小排序[('b', 99), ('g', 89), ('d', 74), ('e', 69), ('a', 66), ('c', 62), ('f', 60)]
print(c[300:600]) #('', 4405)

content.close()

输出:


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34759611/article/details/79948665

python 爬虫思想,抓取网站上尽可能多的英文内容文章,去除停用词后,统计频次出现排名前 300~600 的高频词

抓取链接http://www.chinadaily.com.cn/a/201804/14/WS5ad15641a3105cdcf6518417.html中英文文章及a标签中URL链接中的英文文章,利用...
  • qq_34759611
  • qq_34759611
  • 2018-04-15 13:54:43
  • 45

python jieba分词并统计词频后输出结果到Excel和txt文档

前两天,班上同学写论文,需要将很多篇论文题目按照中文的习惯分词并统计每个词出现的频率。 让我帮她实现这个功能,我在网上查了之后发现jieba这个库还挺不错的。具体代码如下。 #!/usr/bin/py...
  • u014070086
  • u014070086
  • 2017-06-14 11:02:35
  • 10043

NLTK在去停用词、分词、分句以及词性标注的使用

因为实习的缘故,所以有机会接触到了自然语言处理的一些方面。 这里主要总结一下在python环境下进行自然语言处理的相关包和可能会出现的相关错误,目前接触的都比较Low,但是还是想要记录下来。 Nl...
  • qq_27717921
  • qq_27717921
  • 2017-03-09 22:16:06
  • 7096

Python进行文本预处理(文本分词,过滤停用词,词频统计,特征选择,文本表示)

系统:win7 32位 分词软件:PyNLPIR 集成开发环境(IDE):Pycharm 功能:实现多级文本预处理全过程,包括文本分词,过滤停用词,词频统计,特征选择,文本表示,并将结果导出为WE...
  • Junkichan
  • Junkichan
  • 2016-08-25 15:28:51
  • 21714

python 实现文章中词汇的频率统计并进行显示(针对英文文章)

python实现英文文章中出现单词频率的统计 本文的思路: 首先打开文件 ,对于文件的每一行进行词汇的统计,在这里需要注意 需要替换每一行中的单词之间的分隔符为空格,然后使用split()函数去掉...
  • jiaowosiye
  • jiaowosiye
  • 2018-01-30 18:41:22
  • 78

Python下的英文预处理

一 得到原始文本内容     def FileRead(self,filePath):         f = open(filePath)         raw=f.read()        ...
  • caicai1617
  • caicai1617
  • 2014-03-21 08:14:44
  • 10031

Python 3.6 利用NLTK 统计多个文本中的词频

#!/usr/bin/env python # encoding: utf-8""" @author: wg @software: PyCharm @file: word_frequency_stat...
  • u011389474
  • u011389474
  • 2017-03-16 14:04:19
  • 3192

用python统计文本里的单词出现次数最多的10个

python入门教程至此已学习完毕,下面是结业脚本:(一部分是书里的源码,一部分是自己加的练习题) #写一个文本统计的脚本:计算并打印有关文本文件的统计数据,包括文件里包含多少个字符、行、单词数,以...
  • dengzi2009
  • dengzi2009
  • 2015-09-05 22:31:35
  • 5466

统计文章出现最多的10个词语--python实现

f = open("c:\\emma.txt"); count = {} for line in f: line = line.strip() words = line.split()...
  • winter13292
  • winter13292
  • 2014-08-09 21:17:01
  • 2125

分词系统常用中英文停用词

  • 2017年09月16日 11:54
  • 7KB
  • 下载
收藏助手
不良信息举报
您举报文章:python 爬虫思想,抓取网站上尽可能多的英文内容文章,去除停用词后,统计频次出现排名前 300~600 的高频词
举报原因:
原因补充:

(最多只允许输入30个字)