【100天精通python】Day46:python网络爬虫开发_爬取豆瓣最受欢迎的250部电影+实战代码

 爬取豆瓣最受欢迎的250部电影并保存至Excel表格

  1. 导入requests和BeautifulSoup库,以及xlwt库用于创建Excel文件。
  2. 创建request_douban函数用于发送请求获取网页内容,使用headers模拟浏览器访问。
  3. 创建一个Workbook对象用于存储数据,并创建一个Sheet对象用于写入数据。
  4. 使用write方法在第一行写入表头信息。
  5. 创建一个全局变量n用于记录行数。
  6. 创建save_to_excel函数用于解析网页内容并将数据写入Excel文件中。
  7. 使用find方法和CSS选择器定位到电影列表,并使用find_all方法找到所有电影项。
  8. 使用find方法和CSS选择器定位到电影项中的各个信息,并使用string和get方法获取文本内容和图片链接。
  9. 判断简介信息是否存在,如果存在则使用string方法获取内容,否则设置为默认值。
  10. 使用write方法将电影信息写入对应的单元格。
  11. 创建main函数用于控制程序的执行流程。
  12. 拼接URL,根据传入的页数计算start参数并发送请求获取网页内容。
  13. 使用BeautifulSoup解析网页内容。
  14. 调用save_to_excel函数将数据写入Excel文件。
  15. 使用循环调用main函数获取多页数据。
  16. 使用save方法保存Excel文件。

代码如下:

import requests
from bs4 import BeautifulSoup
import xlwt

# 定义请求函数,传入URL参数
def request_douban(url):
    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/88.0.4324.146 Safari/537.36',
        }

    try:
        response = requests.get(url=url, headers=headers)
        if response.status_code == 200:
            return response.text
    except requests.RequestException:
        return None

# 创建一个Excel工作簿对象
book = xlwt.Workbook(encoding='utf-8', style_compression=0)

# 在工作簿中创建一个名为“豆瓣电影Top250”的工作表
sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)
sheet.write(0, 0, '名称')    # 在第一行第一列写入标题“名称”
sheet.write(0, 1, '图片')    # 在第一行第二列写入标题“图片”
sheet.write(0, 2, '排名')    # 在第一行第三列写入标题“排名”
sheet.write(0, 3, '评分')    # 在第一行第四列写入标题“评分”
sheet.write(0, 4, '作者')    # 在第一行第五列写入标题“作者”
sheet.write(0, 5, '简介')    # 在第一行第六列写入标题“简介”

n = 1    # 初始化行数的计数器

# 定义保存数据至Excel的函数,函数接收一个BeautifulSoup对象作为参数
def save_to_excel(soup):
    list = soup.find(class_='grid_view').find_all('li')

    for item in list:
        item_name = item.find(class_='title').string    # 获取电影名称
        item_img = item.find('a').find('img').get('src')    # 获取电影图片链接
        item_index = item.find(class_='').string    # 获取电影排名
        item_score = item.find(class_='rating_num').string    # 获取电影评分
        item_author = item.find('p').text    # 获取电影作者
        if item.find(class_='inq') is not None:
            item_intr = item.find(class_='inq').string    # 获取电影简介
        else:
            item_intr = 'NOT AVAILABLE'

        print('爬取电影:' + item_index + ' | ' + item_name + ' | ' + item_score + ' | ' + item_intr)

        global n

        # 将数据写入Excel表格中
        sheet.write(n, 0, item_name)    # 写入电影名称
        sheet.write(n, 1, item_img)    # 写入电影图片链接
        sheet.write(n, 2, item_index)    # 写入电影排名
        sheet.write(n, 3, item_score)    # 写入电影评分
        sheet.write(n, 4, item_author)    # 写入电影作者
        sheet.write(n, 5, item_intr)    # 写入电影简介

        n = n + 1

# 定义主函数,用于爬取多页面并保存数据至Excel表格中
def main(page):
    url = 'https://movie.douban.com/top250?start=' + str(page * 25) + '&filter='    # 构造URL
    html = request_douban(url)    # 请求URL获取HTML文本
    soup = BeautifulSoup(html, 'lxml')    # 使用BeautifulSoup进行解析
    save_to_excel(soup)    # 将解析结果保存至Excel表格中

if __name__ == '__main__':

    for i in range(0, 10):    # 爬取前10页的数据
        main(i)

book.save(u'豆瓣最受欢迎的250部电影.xlsx')    # 保存Excel文件

猜你喜欢

转载自blog.csdn.net/qq_35831906/article/details/132503875