python数据爬取---爬取文本数据并进行特征提取

1、寻找目标网站并分析结构

我们这次来爬‘百思不得其姐’的内涵段子。

目标网址:

网站结构:每页默认20个段子,要翻页,第2页的网址是2,由此可以推断,该网站是在最后加上数字来区分页面,这样我们可以使用for循环来爬取所有页面的信息。我们可以把目标页面锁定在1-10页。

页面结构:单击鼠标右键选择检查,段子内容保存在一个中

2、编写爬虫进行内容爬取

#导入request库用来请求http
import requests
#导入BeautifulSoup用来对html进行解析
from bs4 import BeautifulSoup
#导入正则表达式用来匹配模式
import re
#导入时间库用来设置休眠时间,避免给服务器带来过大负担
import time


##1-爬数据
#1.1创建一个列表来存爬的数据
all_jokes=[]
#1.2 指定用户代理信息user agent,建立爬虫
user_agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
headers = {User-Agent:user_agent}
#设置for循环,让爬虫从第1页爬到第10页
for i in range(1,11):
    #1.3 用requests.get()方法读取网页
    content=requests.get(http://www.budejie.com/text/{}.format(i),headers=headers)
    #1.4 用户BeautifulSoup()方法解析网页
    soup = BeautifulSoup(content.text, lxml, from_encoding=utf8)
    #1.5 提取正文---正文保存在<div class=j-r-list-c-desc>中,find_all文档https://www.cnblogs.com/keye/p/7868059.html
    #找到正文位置
    jokes=soup.find_all(div,class_=j-r-list-c-desc)
    for joke in jokes:
        text=joke.a.string
        #将爬取的正文添加到列表中
        all_jokes.append(text)
    #打印正在爬取的页面
    print(正在爬取第{}页.format(i))
    #设置每爬一页,休眠2秒
    time.sleep(2)
##存数据
#建立一个文件,以写入模式打开,记得设置编码为gb18030,否则会乱码
with open (/Users/Eric/Documents/2019/python/jokes.txt,w,encoding = utf8) as f:
    for j in all_jokes:
        #将文本写入
        f.write(str(j))
        f.write(
)

3、解析数据

##读取爬取的数据
#打开文件
file=open(/Users/Eric/Documents/2019/python/jokes.txt,r,encoding = utf8)
#读取所有行
lines=file.readlines()
#提取出文本中的字符串数据
line=str(lines)

##处理数据
#导入结巴分词
import jieba
#使用结巴分词对文本进行分词
line=jieba.cut(line)
#在分词中加入空格
x= .join(line)
#保存文件
with open (/Users/Eric/Documents/2019/python/cutjokes.txt,w,encoding = utf8) as f:
    f.write(x)
    
#使用词袋模型对分词进行计数
#导入文本向量化工具
from sklearn.feature_extraction.text import CountVectorizer
#引入算法
vect = CountVectorizer()
#用CountVectorizer算法拟合文本数据
import pandas as pd
df_txt=pd.read_csv(r"/Users/Eric/Documents/2019/python/cutjokes.txt",sep=" ")
vect.fit(df_txt)
df_txt_vect=vect.vocabulary_
#保持数据
s = str(df_txt_vect)
with open (/Users/Eric/Documents/2019/python/df_txt_vect.txt,w,encoding = utf8) as f:
    f.write(s)
经验分享 程序员 微信小程序 职场和发展