一个简单的Python爬虫示例,本文讲解该怎么爬取网页信息,分析页面结构,将信息存入MongoDB(如果没有MongoDB也可以存txt里,并不影响整体程序运行),对影评使用jieba分词来构成词云(解决中文生成词云是空方格)。
使用到的包
import requests
#连接失败的异常
from requests.exceptions import ConnectionError
#MongoDB的包
import pymongo
from pymongo.mongo_client import MongoClient
#MongoDB连接失败的异常
from pymongo.errors import PyMongoError
#使用BeautifulSoup来处理页面
from bs4 import BeautifulSoup
#使用结巴分词
import jieba
#wordcloud词云包,STOPWORDS是默认的弃用词
from wordcloud import WordCloud, STOPWORDS
#将词云的图绘出
import matplotlib.pyplot as plt
import numpy as np
#导入图片用的包
from PIL import Image
#多线程用的包
import threading
下载包用到的命令
jieba包下载,一开始我用的是conda install -c conda-forge jieba但后面发现conda里的jieba包是小于0.4的。
jieba的github网址
在jieba里我看到有一个paddle模式,感觉很厉害就用pip把jieba升级了。如果也想用paddle模式就按图里的命令即可
#jieba下载,后面那个部分是使用清华源下载
pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddlepaddle-tiny==1.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
#wordcloud下载
pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple
其他包都比较常见,就不写了
程序主要由爬取和生成词云两个部分组成
1.爬取豆瓣影评
1.1先访问豆瓣电影看看能不能请求成功
打算爬取的是豆瓣电影里的小丑影评
def scrape(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'
}
res = request.get(url, headers=headers)
print(res.text)
except ConnectionError:
print("爬取失败")
if __name__ == '__main__':
urls = [
'https://movie.douban.com/subject/27119724/comments?start=0&limit=20&sort=new_score&status=P',
]
for i in range(0, len(urls)):
scrape(urls[i])
createWordCloud()
print('结束')
运行了下页面由出来,大致的看了下的确是小丑的短评
1.2分析页面,思考要把什么信息拿出来
我们将在MongoDB里存入用户名,用户做出的评价,短评的内容
易知用户名,评论都在class=comment-info里span里面
用户名是这个span里唯一的a标签,评论是class=rating里title代表的值
短评是class=short里的内容
1.3爬取相应的信息
# 连接MongoDb
def mongo():
try:
mongoClient = MongoClient('localhost', 27017)
# 连接叫local的库
mongoDatabase = mongoClient.local
# 连接叫douban_two的集合
collection = mongoDatabase.douban_two
# 返回集合
return collection
except PyMongoError as e:
print('出错', e)
# 爬取豆瓣短评
def scrape(url):
try:
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'
}
res = requests.get(url, headers=headers