python 爬虫 到csv 加可视化

 1,

 实验目的:

(1)掌握使用requests库实现HTTP请求;

(2)掌握使用正则表达式解析网页;

(3)掌握使用文件存储数据。

实验内容:

(1)爬取豆瓣TOP250排行榜,使用requests库生成HTTP请求、查看状态码与编码;

(2)使用requests库处理请求头与响应头;

(3)使用正则表达式查找电影 TOP250的超链接;

(4)爬取豆瓣TOP 250页面,获取网页中的电影TOP250榜单信息;

(5)把获取的信息保存到本地的csv文件;

 实现的思路:先获得电影TOP250的网页地址,通过一系列操作,获得其网页代码,通过正则获取每25个电影的网页地址,通过选择即可获得想要的电影排行榜。

代码实现


import requests
import re
import csv
li=[]
a='https://movie.douban.com/top250?start='
url="https://movie.douban.com/top250?start=50&filter="
headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
}
resp=requests.get(url,headers=headers)

page_content = resp.text

obj1=re.compile(r'<a href=".*?start=(?P<uuu>.*?)"',re.S)
obj2=re.compile(r'<em class="">(?P<num>.*?)'
               r'</em>.*?<span class="title">(?P<name>.*?)'
               r'</span>.*?<div class="bd">.*?导演:(?P<daoyan>.*?)'
               r'&nbsp;.*?<span class="inq">(?P<yuyan>.*?)</span>', re.S)

result2 = obj1.finditer(page_content)

for it in result2:
    lii=a + it.group('uuu')
    li.append(lii)
    #print(lii)
#print(li)
resp.close()

b = int(input("1-10个,一个有25个电影,请输入你要查询的电影的页码:"))
if b==1:
    url = 'https://movie.douban.com/top250?start=0&amp;filter='
elif b==2:
    url = 'https://movie.douban.com/top250?start=25&amp;filter='
elif b==3:
    url = 'https://movie.douban.com/top250?start=50&amp;amp;filter='
else:
    url = li[b]
resp=requests.get(url,headers=headers)
page_content = resp.text
result1 = obj2.finditer(page_content)
print(url)
f =open("data.csv",mode="w",newline='',encoding='utf-8')
csvwrite = csv.writer(f)
for it in result1:
    dic = it.groupdict()
    csvwrite.writerow( dic.values() )
resp.close()
f.close()
print("over!")

演示结果:


 

 

 

 2,

实验目的:把豆瓣TOP250的数据爬到csv文件中,对数据进行可视化。

实验步骤:

1,首先需要豆瓣排行网页的源代码,通过源代码找到十个小的网址,再通过选择的方式选择需要查询电影。

2,通过正则的方式获得每个电影的序号,电影名,导演,评分。

3,导入csv库,将数据存入csv文件中。

4,导入matplotlib库,制作排行榜与评分的关系,由于一次性数据过多,需要用到两个图进行可视化。

代码实现:


import requests
import re
import csv
import matplotlib.pyplot as plt #画图
import numpy as np #初始数据
li = []
labels1 = []
labels2 = []
graphname = []
ff = []

a='https://movie.douban.com/top250?start='
url="https://movie.douban.com/top250?start=50&amp;filter="
headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
}

resp=requests.get(url,headers=headers)

page_content = resp.text

obj1=re.compile(r'<a href=".*?start=(?P<uuu>.*?)"',re.S)
obj2=re.compile(r'<em class="">(?P<num>.*?)'
               r'</em>.*?<span class="title">(?P<name>.*?)'
               r'</span>.*?<div class="bd">.*?导演:(?P<daoyan>.*?)'
               r'&nbsp;.*?property="v:average">(?P<score>.*?)</span>', re.S)

result2 = obj1.finditer(page_content)

for it in result2:
    lii=a + it.group('uuu')
    li.append(lii)
    #print(lii)
#print(li)
resp.close()

b = int(input("1-10个,一个有25个电影,请输入你要查询的电影的页码:"))
if b==1:
    url = 'https://movie.douban.com/top250?start=0&amp;filter='
elif b==2:
    url = 'https://movie.douban.com/top250?start=25&amp;filter='
elif b==3:
    url = 'https://movie.douban.com/top250?start=50&amp;amp;filter='
else:
    url = li[b]
resp=requests.get(url,headers=headers)
page_content = resp.text
result1 = obj2.finditer(page_content)
print(url)


#将数据存入csv文件中
f =open("tt.csv",mode="w",newline='',encoding='utf-8')
csvwrite = csv.writer(f)
for it in result1:
    dic = it.groupdict()
    #print(dic)
    graphname.append(dic['name'])
    ff.append( float(dic['score']) )
    csvwrite.writerow( dic.values() )
resp.close()
f.close()


from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]

for i in range(0,13):
    labels1.append(graphname[i])
for i in range(13,25):
    labels2.append(graphname[i])


#可视化 创建两个图
fig = plt.figure()

a1 = fig.add_subplot(211)
x = np.arange(0,13,1)
y = np.array(ff)[x] #索引数组去索引一个列表,即诸如list[indexarray]的形式,np.array(list)[indexarray]
plt.ylabel('评分')
plt.xlabel('豆瓣排名top250')
plt.xticks(range(0,13,1),labels=labels1 )
plt.plot(x,y,color='red',linestyle='-',linewidth=2,marker='^')

a2 = fig.add_subplot(212)
x = np.arange(13,25,1)
y = np.array(ff)[x]
plt.ylabel('评分')
plt.xlabel('豆瓣排名top250')
plt.xticks(range(13,25,1),labels=labels2 )
plt.plot(x,y,color='red',linestyle='-',linewidth=2,marker='^')

plt.show()

print("over!")

爬取到csv文件:


 数据可视化:


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值