Python爬虫—影评的爬取
介绍:爬虫练手,使用Requests库进行豆瓣影评的爬虫,做成词云图,写文章主要做一些问题解决的记录。
运行环境:python 3.8, Pycharm
关于在豆瓣爬取影评内容,就不太多叙述,推荐看一个B站up的视频,简单易懂
目录
项目准备
1.安装Python生成词云的常用库[wordcloud]
pip install wordcloud
安装失败请看后面的解决方法
wordcloud默认是为了英文文本来做词云的,如果需要制作中文文本词云,就需要先用**[jieba]**对文本进行分词
2.安装中文分词库[jieba]
pip install jieba
3.安装爬虫库[requests]
pip install requests 或 在Pycharm里面安装
另外还需要安装bs4等库
项目代码
因为内容较为简单,且有注释,不做太多解释。
RD_request.py 爬取内容,写入到一个txt文件内
import requests
import time
import random
from bs4 import BeautifulSoup
#请求数据
# UA
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
}
# 通过观察的url翻页的规律,使用for循环得到10个链接,保存到urls列表中
urls = ['https://movie.douban.com/subject/34841067/comments?start={}&limit=20&status=P&sort=new_score'.format(str(i)) for i in range(0, 200, 20)]
comments_list = []
for url in urls:
# 发送请求
r = requests.get(url=url, headers=headers).text
# 处理
res = BeautifulSoup(r, 'html.parser')
ul = res.find('div', id="comments")
p_list = ul.find_all('p')
list2 = []
for li in p_list:
list2.append(li.find('span').string)
comments_list.extend(list2)
time.sleep(random.randint(0, 3)) # 暂停0~3秒,有的网站会限制用户访问频率,所以进行模拟
# 注意指定文件的编码格式为UTF-8
with open("lhy.txt", "a+", encoding='utf-8') as f:
for i in comments_list:
f.write(i+"\n")
将会获得一个lhy.txt文件
RD_wordcloud 读取txt文件内的内容,生产词云图
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
#处理文本,并制作词云图
# 打开文本
with open("lhy.txt",encoding="utf-8") as f:
s = f.read()
# 中文分词
text = ' '.join(jieba.cut(s))
# 生成对象
img = Image.open("001.png") # 打开蒙版图片
mask = np.array(img) #将图片转换为数组
stopwords = ["我", "你", "她", "的", "是", "了", "在", "也", "和", "就", "都", "这"]
wc = WordCloud(font_path="msyh.ttc",
mask=mask,
width=000,
height=700,
background_color='white',
max_words=200,
stopwords=stopwords).generate(text)
# 显示词云
plt.imshow(wc, interpolation='bilinear')# 用plt显示图片
plt.axis("off") # 不显示坐标轴
plt.show() # 显示图片
# 保存到文件
wc.to_file("lhy01.png")
蒙版图片使用白底有图案图片,有图案的地方会被词云替代
生成的词云图:
遇到的问题及解决方法
1.安装wordcloud库遇到问题
解决方法:
下载对应于你安装的python版本的wordcloud-x.x.x-cpxx-cpxxm-win32.whl文件(如:python3.8对应的是wordcloud-1.8.1-cp38-cp38-win_amd64.whl)
放在你安装python的目录下(或项目目录下)后进行安装pip install wordcloud-1.8.1-cp38-cp38-win_amd64.whl,接下来就可以直接安装wordcloud了
使用 pip list 进行查看
安装完成!!!
2.安装其他第三方库遇到问题
2.1 尝试换国内镜像
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
*例如:pip install -i https://pypi.doubanio.com/simple/ 包名*
2.2 尝试本地安装(下载whl文件方式):参考 worldcloud 安装的解决
2.3 在PyCharm里面装
!!! 如果尝试了以上三种方式还出错 !!!
且报错为[WinError 10061 ] “由于目标计算机积极拒绝。。。。”
请查看电脑 设置—系统代理设置—关闭系统代理
(曾经卡了我一个下午)
3.bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml。您需要安装解析器库吗?
使用内置python html解析器,不安装不依赖项
soup = BeautifulSoup(s, "html.parser")
4.文件编码格式问题
解决的办法就是,改变目标文件的编码:with open(“lhy.txt”, “a+”, encoding=‘utf-8’) as …
5.ImportError: DLL load failed while importing mtrand: 找不到指定的程序
因为使用的是python 3.9,所以对应的matplotlib 需要更新
pip install matplotlib==3.2.1
另一个解决方法将python 降版本到3.8。
爬虫注意事项
查看豆瓣的robots协议:
douban_robots
解读:
robots.txt文件中各项目的格式为: :
常用的field有Allow, Disallow, Request-rate, Visit-time, User-agent, Robot-version等.robots.txt文件中的注释以’#'开始.可以为独立的一行,也可以一行的后面部分.下面对每一个field,也叫directive进行一一介绍:
-
User-agent: 该字段的值是记录描述其访问策略的机器人的名称。
例子:User-agent: *
在这里*代表,与任何其他记录不匹配的任何机器人 -
Disallow: 指定不能访问我URL
例子: Disallow: /foo.html #foo.html不能访问
Disallow: #该目录下所有URL都可访问
Disallow: / #该目录下所有URL都不可以访问 -
Allow: 用来指定能访问的URL, 这个在当指定所有URL为不可访问,然后可以用这个排除特殊的一些URL. 这时候比较方便.
例子: Allow: / #允许访问所有URL
小建议
1.爬虫访问频次要控制
2.涉及到个人隐私的信息不能爬
3.突破网站的反爬措施,后果很严重
4.不要用爬取的数据做不正当竞争
5.付费内容,不要爬
6.突破网站反爬措施的代码,最好不要上传到网上