练习爬虫爬取网页电影信息
-首先,导入包
import requests
import pandas as pd
from matplotlib import pyplot as plt
#绘图汉字编码
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from lxml import html
movie_list = []
-设置域名
# 目标站点地址
url = 'https://movie.douban.com/cinema/later/chongqing/'
-设置爬取信息时的访问用户信息
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}
resp = requests.get(url, headers=headers)
html_data = resp.text
#提取电影网站的信息
selector = html.fromstring(html_data)
ul_list = selector.xpath('//div[@class="intro"]')
print('一共{}部电影'.format(len(ul_list)))
#电影名
for li in ul_list:
title = li.xpath('./h3/a/text()')[0]
print(title)
# 上映日期
date = li.xpath('./ul/li[1]/text()')[0]
print(date)
# 类型
type = li.xpath('./ul/li[2]/text()')[0]
print(type)
# 上映国家
country = li.xpath('./ul/li[3]/text()')[0]
print(country)
# 想看人数
want = li.xpath('./ul/li[4]/span/text()')[0]
want = float(want.replace('人想看', ''))
print('想看人数:{}人'.format(want))
#添加所有的电影信息
movie_list.append({
'title':title,
'date':date,
'type':type,
'country':country,
'want':want
})
#按时间排序
movie_list.sort(key=lambda x:x['want'])
for movie in movie_list:
print(movie)
#柱状图
top5_title = [movie_list[i] for i in range(5)]
x = [x['title'] for x in top5_title]
print(x)
y = [x['want'] for x in top5_title]
print(y)
plt.barh(x,y)
plt.show()
#占比图
mov_list = []
counts ={}
for mo in movie_list:
mov_list.append(mo['country'])
print(mov_list)
for word in mov_list:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
print(items)
li = []
lo = []
for i in range(4):
co, count = items[i]
li.append(co)
lo.append(count)
#explode=0,0,0,0表示四个扇区
explode = [0, 0, 0, 0]
#labels是对标签的定义
#shadow=True表示有一定的“阴影”
plt.pie(lo, explode=explode, shadow=True, labels=li, autopct='%1.1f%%')
plt.legend(loc=2)
plt.axis('equal')
plt.show()
之前列表字典的区别有些没分清楚,再写一下
-列表
1.可以用list()函数或者方括号[]创建,元素之间用逗号’,‘’分隔。
2.列表的元素不需要具有相同的类型
3.使用索引来访问元素
4.可切片
-字典
1.元素由键(key)和值(value)组成
2.可以用dict()函数或者方括号()创建,元素之间用逗号’,‘’分隔,键与值之间用冒号”:”隔开
3.键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组
4.使用键(key)来访问元素