案例背景
电影才是世界艺术,所以我一直想看完豆瓣250,那么就重新拾起我的爬虫知识。
以前刚学爬虫那啥也不会,python语法都没弄清楚,现在不一样了,能用最为简洁的代码写出爬虫250的代码。
代码实现
导入包,写请求头:
import requests; import pandas as pd
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537',}
然后遍历每一面每个电影,我只获取了电影名称评分和简介:
info_max = []
for h in range(10): #10页
url = f'https://movie.douban.com/top250?start={25 * h}&filter='
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
infos = soup.find_all('div', class_='info')
for i, info in enumerate(infos): #每页25个电影
movie_name = info.find('span', class_='title').text #名称
rating_num = info.find('span', class_='rating_num').text #评分
inq = info.find('span', class_='inq').text if info.find('span', class_='inq') else '' #简介
info_max.append([movie_name, rating_num, inq]) #打包添加
print(f"第{h + 1}页获取完成")
有的同学不知道怎么定位自己需要的信息所在的位置,很简单例如我要获取评分,f12打开网页文件,然后点击元素选择器点评分的位置:
可以看到评分这一元素对应的是span标签,class_的值也有,传入python就行。:“info.find('span', class_='rating_num').text”,想要别的元素也是一样,选择,然后查看这个元素的标签和class名称。很简单。
查看结果:(只展示前五行)
df=pd.DataFrame(info_max,columns=['电影名称','评分','简介'])
df.index=df.index+1
df.head()
然后保存为excel就行啦:
df.to_excel('豆瓣.xlsx')
随机电影脚本
每次不知道看什么电影就随机选一个就行,下面是随机选电影的全部代码脚本:
import os,random,time
import requests; import pandas as pd
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537',}
file_name = '豆瓣250.csv'
# 检查文件是否存在
if os.path.exists(file_name) and os.path.isfile(file_name):
df=pd.read_csv(file_name).set_index('序号')
else:
print('第一次运行要下载电影信息...')
info_max = []
for h in range(10): #10页
url = f'https://movie.douban.com/top250?start={25 * h}&filter='
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
infos = soup.find_all('div', class_='info')
for i, info in enumerate(infos): #每页25个电影
movie_name = info.find('span', class_='title').text #名称
rating_num = info.find('span', class_='rating_num').text #评分
inq = info.find('span', class_='inq').text if info.find('span', class_='inq') else '' #简介
info_max.append([movie_name, rating_num, inq]) #打包添加
print(f"第{h + 1}页获取完成")
df=pd.DataFrame(info_max,columns=['电影名称','评分','简介'])
df.index=df.index+1 ; df.index.name='序号'
df.to_csv(file_name)
index=random.choice(range(len(df)))+1
print(f"今天看TOP-{index}的电影《{df.loc[index,'电影名称']}》,评分{df.loc[index,'评分']}\n 简介:{df.loc[index,'简介']}")
print('\n=====五秒后自动关闭程序=====')
time.sleep(5)
第一次会下载电影信息,后面每次打开都会随机选一个电影, 很好用的。
打包为EXE文件
这么好用的脚本分享给朋友的话,一来他们不一定有python,二来不一定有对应的包,而且版本可能也对不上....会报错,那么就打包为exe文件,然后就可以给朋友们运行了。
首先安装一个库:
pip install pyinstaller
然后win+r,输入cmd打开终端
输入自己的代码文件所在的路径:
cd /d "E:\Xiao work\其他\自学pandas"
然后输入自己打包的文件:
pyinstaller --onefile 随机看电影.py
然后等着就完成啦,这个程序就随便什么电脑都能运行了。