day17 作业

豆瓣电影10页:电影名称 ,评分,评论人数,描述信息(上映时间,出版国家,电影类型),最终将数据写到csv文件中

from bs4 import BeautifulSoup
import requests
from re import fullmatch, findall
import csv

headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}

response = requests.get('https://movie.douban.com/top250', headers=headers)
html = response.text

soup = BeautifulSoup(html, 'lxml')

# 1、取名字
title = soup.select('#content .title')
# print(title)
for x in title:
    print(x.text)

#我想把数据通过正则取出来,None
# movies_title = fullmatch(r'[\u4e00-\u9fa5]+|\w+', str(title))
# print(movies_title) 

# 2、取分数
# <span class="rating_num" property="v:average">9.7</span>
grades = soup.select('#content .rating_num')
# print(grades)
for y in grades:
    print(y.text)

# 3、取评论人数,因为没有属性值,所以直接用正则快
nums = findall(r'(\d+)人评价', str(soup))
print(nums)
# div_numbers = soup.select('#content .star')
# print(div_numbers)

# 4、电影评语
comment = soup.select('#content .inq')
# print(comment)
for z in comment:
    print(z.text)

#5、没有属性取不出来
# 上映时间
# 国家
# 电影类型


#6、因为前面正则没取出来,所以这个表格做不成,g
# data = map(lambda i1, i2, i3: {'电影名称': i1, '评分': i2, '电影评语': i3,}, x.text, y.text, z.text)
# f = open('files/movies.csv', 'w', encoding='utf-8', newline='')
# w = csv.DictWriter(f, ['电影名称', '评分', '电影评语'])
# w.writeheader()
# w.writerows(list(data))

#小改了一点,用append制作列表,但是还是不能遍历十页
# 取名字
# title = soup.select('#content .title')
# # print(title)
#
# new_title = []
# for x in title:
#     Title = x.text
#     new_title.append(Title)
title = findall(r'<span class="title">([\u4e00-\u9fa5]+)</span>', html)


# movies_title = fullmatch(r'[\u4e00-\u9fa5]+|\w+', str(title))
# print(movies_title)

# 取分数
# <span class="rating_num" property="v:average">9.7</span>
grades = soup.select('#content .rating_num')
# print(grades)

new_score = []
for y in grades:
    score = y.text
    new_score.append(score)

# 取评论人数
nums = findall(r'(\d+)人评价', str(soup))
# print(nums)
# div_numbers = soup.select('#content .star')
# print(div_numbers)

# 电影评语
comment = soup.select('#content .inq')
# print(comment)

new_comment=[]
for z in comment:
    introduce= z.text
    new_comment.append(introduce)

# 上映时间
# 国家
# 电影类型



# data = map(lambda i1, i2, i3: {'电影名称': i1, '评分': i2, '电影评语': i3,}, x.text, y.text, z.text)
#
# f = open('files/movies.csv', 'w', encoding='utf-8', newline='')
# w = csv.DictWriter(f, ['电影名称', '评分', '电影评语'])
# w.writeheader()
# w.writerows(list(data))

data = map(lambda i1, i2, i3, i4: {'电影名': i1, '评分': i2, '评价人数': i3, '简介': i4}, title, new_score, nums, new_comment)
# print(list(data))

f = open('files/豆瓣电影.csv', 'w', encoding='utf-8', newline='')
w = csv.DictWriter(f, ['电影名', '评分', '评价人数', '简介'])
w.writeheader()
w.writerows(list(data))


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百事不可乐BOOM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值