爬取猫眼即将上映电影信息(下)

349 阅读3分钟

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。

代码中用到的库和方法如果不了解的可以参考:

爬取猫眼即将上映电影信息(上)

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍爬取猫眼即将上映电影信息的主要代码和遇到的一些问题和解决方案。

1. 具体代码实现

 from bs4 import BeautifulSoup
 from selenium import webdriver
 import pandas as pd
 ​
 movie_name = []  # 电影的名字
 actor_name = []  # 演员的名字
 release_time = []  # 上映时间
 synopsis = []  # 剧情简介
 movie_url = []  # 电影链接
 # 使用selenium库获取真实浏览器驱动
 driver = webdriver.Firefox()
 ​
 ​
 def get_html(url):
     driver.get(url)
     return driver
 ​
 ​
 # 使用浏览器驱动模拟真实浏览器行为,获取动态的真实的url
 def parse_html():
     soup = BeautifulSoup(driver.page_source, "lxml")  # 创建BeautifulSoup对象
 ​
     for div in soup.find_all("div", class_="movie-item film-channel"):
         a = div.find("a").attrs['href']
         url = "https://www.maoyan.com" + a
         movie_url.append(url)
         get_info(url)
 ​
 ​
 def get_info(url):
     driver.get(url)  # 获取网页text
     soup = BeautifulSoup(driver.page_source, "lxml")  # 创建BeautifulSoup对象
     # 爬取电影的名字,
     movie_name.append(soup.find("h1").string)
     # 爬取主演的名字,多个主演用”,“连接成字符串当成一个整体
     div = soup.find(class_="celebrity-container clearfix")
     name = []
     for li in div.find_all("li", class_='celebrity actor'):
         s = li.find(class_="name").string
         s = s.strip()
         name.append(s)
     str_name = ",".join(name)
     actor_name.append(str_name)
     # 爬取上映时间
     lis = soup.find_all("li", class_="ellipsis")
     release_time.append(lis[2].string.strip())
     # 爬取剧情简介
     span = soup.find(class_="dra")
     synopsis.append(span.string.strip().replace("\n",""))
 ​
 ​
 # 把爬取的内容使用pandas库写入csv文件
 def write_csv(filename):
     dict = {'电影名称': movie_name, '主演': actor_name, "上映时间": release_time, "电影链接": movie_url, "剧情简介": synopsis}
     dataframe = pd.DataFrame(dict)
     dataframe.to_csv(filename, mode="a", encoding="utf_8_sig")
 ​
 ​
 def main():
     i = 0
     for i in range(3):
         # 爬取的具体网页
         # https://www.maoyan.com/films?showType=2&sortId=1  按照热度排序
         # https://www.maoyan.com/films?showType=2&sortId=2  按照上映时间排序
         # 根据爬取的内容来更改url
         url = "https://www.maoyan.com/films?showType=2&sortId=1&offset="
         num = i * 30
         url += url + str(num)
         get_html(url)
         parse_html()
     # 直接输入文件名即可,以csv结尾
     filename = input()
     write_csv(filename)
 ​
 ​
 main()

2. 遇到的的问题

问题及解决方案:

  • 问题1:使用requests进行爬取,爬取10个左右就被猫眼反扒机制限制。 解决方案1:使用多个user-agrent和cookies,进行爬取,失败!!! 解决方案2:使用Selenium模拟真实浏览器动态获取真实URL
  • 问题2:爬取具体想看人数失败。猫眼的数字使用动态字体进行加密,源码中不能获取真实数字。 解决方案:暂无
  • 问题3:爬取到的某些数据显示在csv中,可读性较差。 解决方案:对爬取到的数据进行逐个格式处理后再写入文件。
  • 问题4:爬取过程中有时会遇到滑动块验证的问题导致爬取中断。 解决方案:手动验证,关闭浏览器,重新爬取。

结语

以上就是爬取猫眼电影网站上的即将上映的电影信息及保存为csv文件的思想和具体代码。希望对读者有所帮助,如果感觉有用,欢迎点赞关注,我们互相学习进步。