- 分析网页结构
- 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)
解决方法:因为是网络链接超时, 需要切换镜像源
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学
https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/ 例如:pip3 install -i
https://pypi.doubanio.com/simple/ 模块名
失败三: 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地址发送请求
- 获取数据 获取服务器返回响应数据
- 解析数据
- 保存数据
代码
python学习群:770699889###
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)