接到上页 https://blog.csdn.net/naner3344/article/details/81146518 我们已经把文章清单列表抓取了,接下来我们就是逐一抓取文章
抓取文章内容比上页还要简单些,但是一抓下来发现里面混了很多html标签
这个里面大部分都是html标签, 比较麻烦,尝试了很多种方法去除都不是很好,最后看见别人用正则表达式,试了一下效果很好
pattern = re.compile(r'<[^>]+>', re.S)
result = pattern.sub('', str(html))
效果图
基本还行吧,但是还有些特殊的东西如   这种东西在网页里面是解析成空格,但是爬虫不知道,这个需要后面改,先那样吧。
然后开爬,代码走起
#python 3
# encoding: utf-8
import sys
import io
import requests
from bs4 import BeautifulSoup
import re
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') #改变标准输出的默认编码
def getrequest(url):
s=requests.session()
headers={
'Accept': 'text/plain, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'eip.teamshub.com',
'Referer': 'http://eip.teamshub.com/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
cookies={
'JSESSIONID': 'BE30CEC4A6A627660E088017B92AE337'}
rs=s.get(url,headers=headers,cookies=cookies,verify=False)
return rs.text
def htmlparse(rs):
soup = BeautifulSoup(rs, # HTML文档字符串
'html.parser' # HTML解析器
)
# 查找已经获取a标签节点中所有连接
content = soup.find_all('div',{'style': 'display:none'});
return content[0]
def cleanHtml(html):
if html == "": return ""
pattern = re.compile(r'<[^>]+>', re.S)
result = pattern.sub('', str(html))
return result
feedlist=[line for line in open('urllist.txt', 'r', encoding='utf-8')]
for feedurl in feedlist:
try:
url=feedurl.split("\t")[2]
print(url)
rstext = getrequest(url)
content = htmlparse(rstext)
result = cleanHtml(content)
out = open('E:\\blog\\70171506\\'+url.split("/t/")[1]+'.txt', 'w', encoding='utf-8')
out.write(result)
except:
print ('Failed to parse feed %s' % feedurl)
最终从21点29抓取到22点54才完全结束,一共5070篇文章,耗时约1个半小时。
数据源抓取基本完成,值得学习的是正则表达式确实强悍,是数据还是存在一些不够完美,需要精细化操作,不过从大数据分析的角度来看,只要不影响到结局就可以忽略,另外从耗时来看,是单线程,如果改成多线程,效率应该能翻倍。
暂且这样,本文文章处理暂时告一段落,一下文是对现有文章进行分词,并提取公共词汇形成矩阵。