Python豆瓣爬虫(最简洁的豆瓣250爬虫,随机选择电影)

案例背景

电影才是世界艺术,所以我一直想看完豆瓣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

 

然后等着就完成啦,这个程序就随便什么电脑都能运行了。

猜你喜欢

转载自blog.csdn.net/weixin_46277779/article/details/132425376