爬虫(requests+beutifulsoup)的简单介绍,内附详细教学链接 记一次社会计算作业 (一)

写在前面: 首次写csdn的博客, 记录一次涉及爬虫, 中文词句情感分析, 数据可视化的社会计算作业, 不过仅涉及非常粗浅的介绍和本次作业中用到的内容, 会在每个板块最后附上相应内容学习的其他博客链接.

分析题意

对于2019年度的电影评分数据,电影描述以及标签信息等数据进行获取和分析,作一份电影分析报告。
要求内容:
1.	正面,负面,中性评价比率
2.	粉丝分布属性
3.	票房属性

完成作业大概分为三个板块:

  • 获取豆瓣上的电影数据
    1.爬虫的基础知识
    2.BeautifulSoup库的使用
  • 分析数据(情感分析)
    1.python对excel的操作
    2.中文情感分析snowNLP库的使用
  • 可视化表示数据
    1.excel的图表操作
    2.python的matplotlib库画三维散点图

本篇博客只涉及到第一板块的内容,后面内容将在后两篇文章中

基础知识


1.爬虫 : 此处的爬虫仅需要涉及到以下内容:

  • 用requests库获取网页源代码
cookie = '这里填你的cookie'
user-agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
#这里的user-agent建议就用这个
headers = {"user-agent" : user-agent,"Cookie":cookie}
url = 'https://www.baidu.com'
response = requests.get(url,headers)
response = response.text
print(response)

此处的headers内容在此处作业中非常必要, 否则豆瓣会拒绝我们的请求, 返回无用的信息.


点击"爬虫详细教学"学习更多爬虫相关内容


2.BeautifulSoup库 : 匹配需要的内容:

BeautifulSoup库可以对python爬下来的html页面进行解析和美化. 此处只需要几个简单函数就可以提取到所需要的信息.

from bs4 import BeautifulSoup 
#调用bs库
soup = BeautifulSoup(response,"html.parser")z
#这个函数可以解析得到的html文件
soup.find_all('tag',class_='巴拉巴拉')
#这个可以找到所有tag标签中类是巴拉巴拉的信息
soup.a 可以输出soup中标签为a的项
soup.a.string可以输出项的文本,但是遇到换行就只能读取第一行
在文本有换行时,用soup.a.text可以得到所有的文本
soup.a.attrs['class']得到class的值

接下来我们举个小例子
图片是豆瓣的短评页爬取到的内容的一个评论信息块
豆瓣的某个评论块
假设这段html代码我们已经用以文本形式存储在了变量response中.

soup = BeautifulSoup(response,“html.parser”)
这个语句将文本解析成beautifulsoup的格式

a = soup.find_all(‘span’)
此时的a是一个列表,内部存有每个span标签

soup = BeautifulSoup(response,"html.parser")

a = soup.find_all('span')

for i in a:
	print(i)
	print("=============")

在这里插入图片描述
列表中的每一个都可以直接调用 . 此处我们需要的是其中的评论内容和用户的个人主页链接 . 我们要怎么得到他们呢:

  • 评论内容:
    1.显然我们看到评论内容在列表中的最后一个,采用a[-1].text就能得到
    2.或者我们发现其实他有class是short,那么我们在找的时候其实可以直接用
    a = soup.find_all(‘span’,class_=‘short’)
    a[0].text
    得到评论的内容
    请注意这里的a[0],因为find_all返回的是列表
    请注意这里的class_,因为class是保留字,所以一定要加个下划线以示区分.
soup = BeautifulSoup(response,"html.parser")

a = soup.find_all('span')

print(a[-1].text)

a2 = soup.find_all('span',class_='short')

print(a2[0].text)

在这里插入图片描述

  • 个人主页链接:
    观察得到:链接是一个a标签内的href属性,所以我们先定位到comment-info的位置,再直接调用即可
    m = soup.find(‘span’,class_=‘comment-info’)
    m.a.attrs[‘href’]
    就可以得到链接
soup = BeautifulSoup(response,"html.parser")

m = soup.find('span',class_='comment-info')

print(m.a.attrs['href'])

在这里插入图片描述


点击"BeautifulSoup博客"获取更多相关内容


以上就是一些基础知识的内容,回到我们这次的任务中,要爬取豆瓣的电影评论,由于豆瓣的权限规则,只有登录后才能爬取一些内容 , 所以这里我们需要模拟登录状态,我们需要在headers里添加自己的登录后的cookie.

话不多说 , 搞起来

获取cookie非常简单,只需要
1.登录后打开你的豆瓣
2.右键打开检查
3.点击图中的 network
在这里插入图片描述
4.CTRL + R刷新网页
5.如图示点击1,2,3,找到4就是我们要的cookie
在这里插入图片描述
6.将cookie复制进去到python的cookie时注意用单引号而不是双引号.


作业中要求2019年总的电影的数据分析,我们需要较多的电影数据(图中为爬取得到的总信息)
在这里插入图片描述
我们在分类页进行爬取
2019年豆瓣电影链接
但是我们查看网页源代码并没有找到我们要的信息, 幸运的是在抓包时我们找到了他请求电影信息的真实网址

右键检查–network–刷新页面–XHR-找到一个数据包–header-request_url
在这里插入图片描述
点开网址发现里面的内容非常nice
真实请求网址
在这里插入图片描述
这其实是一个json类型,用json类型的方式提取我们要的数据就行了,同时注意到
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0&year_range=2019,2019
此处的start=0,可以修改为start=20来模拟点击下一页

更妙的是:
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0&limit=500&year_range=2019,2019
由于在其他网址看到过limit控制数量,此处尝试发现也可以,于是直接获得500部电影的数据,稍加处理即可.
在这里插入图片描述
python读写excel的操作会在下一篇文章中介绍

第一次写博客,请轻喷555555

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值