嗨害大家好鸭~我是小熊猫❤
最近有点剧荒…
排行前十的电影已经不能满足了
这次整个排行的来一次性看个够
本次亮点:
- 分析网页结构
- css/xpath/re 解析数据
- 保存CSV文件
所使用环境介绍:
- python 3.8
- Pycharm
本次模块使用:
- requests >>> 数据请求模块 pip install requests
- parsel >>> 数据解析模块 pip install parsel
- csv
模块安装问题:
如果安装python第三方模块:
- win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
- 在pycharm中点击Terminal(终端) 输入安装命令
安装失败原因:
失败一: pip 不是内部命令
解决方法: 设置环境变量
失败二: 出现大量报红 (read time out)
解决方法:
因为是网络链接超时, 需要切换镜像源
失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入
解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可)
卸载一个就好或者你pycharm里面python解释器没有设置好
如何配置pycharm里面的python解释器?
- 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
- 点击齿轮, 选择add
添加python安装路径 - pycharm如何安装插件?
选择file(文件) >>> setting(设置) >>> Plugins(插件)
点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation
选择相应的插件点击 install(安装) 即可 - 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
爬虫代码基本四个步骤:
-
发送请求 确定请求url地址
通过python代码模拟浏览器对于url地址发送请求 -
获取数据
获取服务器返回响应数据 -
解析数据
-
保存数据
代码
import requests # 数据请求模块
import parsel # 数据解析模块
import csv # 保存csv文件
f = open('top250最终版本03.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'电影名',
# '导演',
# '主演',
'演员信息',
'年份',
'国家',
'电影类型',
'评分',
'评论量',
'简介',
'详情页',
])
csv_writer.writeheader()
# 1. 发送请求
for page in range(0, 250, 25):
url = f'https:///top250?start={page}&filter='
# 请求头 字典数据类型, 构建完整键值对 对于一些基本没有什么反爬的网站, 不加请求头也可以
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36'
}
# 发送请求代码
response = requests.get(url=url, headers=headers) # <Response [200]> 200 状态码表示请求成功
# 2. 获取响应对象的文本数据
# print(response.text) # 字符串数据类型
# 3. 解析数据 提取我们想要数据内容 如果你想要直接对于字符串数据进行解析(提取) 只能用re正则
selector = parsel.Selector(response.text) # 把获取下来html字符串数据, 转成selector可解析的对象
# print(selector) <Selector xpath=None data='<html lang="zh-CN" class="ua-windows ...'>
# css选择器: 就是根据标签属性内容,提取相关数据
lis = selector.css('.grid_view li') # 第一次提取, 获取所有li标签 返回列表
for li in lis: # 一个一个提取列表里面元素, 通过for循环遍历
try:
# span:nth-child(1) 选择第一个span标签
# span:nth-child(1)::text 获取第一个span标签里面文本数据
# span::text 也可以得到数据 get() 获取第一个标签里面 getall() 获取所有内容
title = li.css('.hd a span::text').get() # 电影名字
info_list = li.css('.bd p:nth-child(1)::text').getall()
# strip() 去除字符串左右两端空格 split 对于字符串数据分割返回列表 replace 替换
# actor_list = info_list[0].strip().split(' ')
# director = actor_list[0].replace('导演: ', '') # 导演
# actor = actor_list[1].replace('主演: ', '').replace('/...', '') # 主演
actor_list = info_list[0].strip().replace('导演: ', '').replace('主演: ', '') # 演员信息
info = info_list[1].strip().split(' / ')
date = info[0] # 年份
country = info[1] # 国家
movie_types = info[2] # 电影类型
score = li.css('.rating_num::text').get() # 评分
comment = li.css('.star span:nth-child(4)::text').get().replace('人评价', '') # 评论量
summary = li.css('.inq::text').get() # 简介
href = li.css('.hd a::attr(href)').get() # 详情页
dit = {
'电影名': title,
# '导演': director,
# '主演': actor,
'演员信息': actor_list,
'年份': date,
'国家': country,
'电影类型': movie_types,
'评分': score,
'评论量': comment,
'简介': summary,
'详情页': href,
}
csv_writer.writerow(dit)
print(title, actor_list, date, country, movie_types, score, comment, summary, href, sep=' | ')
except Exception as e:
print(e)
今天的文章就到这里结束啦~
我是小熊猫,咱下篇文章再见啦(✿◡‿◡)
源码资料素材下方名片获取