这次我们就要来使用上次说的 BeautifulSoup + Reuqests 进行爬取豆瓣TOP250电影

这次我们将爬取到的内容存放到 excel

打开目标网站https://movie.douban.com/top250?start=0&filter=

每次点击下一页,start的值会加25,一共十页,最大225

接下来我们来看下我们要的主要信息

主要思路:

​ 请求豆瓣的链接获取网页源代码

​ 然后使用 BeatifulSoup 拿到我们要的内容

​ 最后就把数据存储到 excel 文件中

def main(page):
    url="https://movie.douban.com/top250?start="+str(page*25)+"&filter="#获取链接
    html=request_douban(url)#获取html
    soup=BeautifulSoup(html,"lxml")#处理html,获取所需信息
    save_to_excel(soup)#处理并保存所需信息

处理url

#请求豆瓣电影
def request_douban(url):
        response=requests.get(url)
        if response.status_code==200:
            return response.text
    except requests.RequestException:
        return None

获取html

soup=BeautifulSoup(html,"lxml")

处理html获取所需信息

信息都在grid_view类里

def save_to_excel(soup):
    list = soup.find(class_="grid_view").find_all("li")#获取关键信息部分的html
    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#获取评分
        if item.find(class_='inq') is not None:			#获取评价
            item_quote = item.find(class_="inq").string
        else:
            item_quote=""
        item_author = item.find(class_="bd").find(class_="").text #获取导演,演员信息
        print("爬取电影:" + item_name + "|" + item_score + "|" + item_quote)#打印获取详情
        global n
        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_quote)
    return None

主执行函数,写入excel文件

写入excel文件需要用到xlwt库

Python xlwt 用法说明_

if __name__=="__main__":
    n = 1
    book = xlwt.Workbook()# 创建一个工作薄,可以在里面设置参数比如encoding="utf-8" 
    sheet = book.add_sheet("豆瓣电影TOP250", cell_overwrite_ok=True) #创建一个工作表,名称为"豆瓣电影TOP250";允许覆盖写入
   # 写入第i行第j列的单元格
    sheet.write(0, 0, "名称")
    sheet.write(0, 1, "图片")
    sheet.write(0, 2, "排名")
    sheet.write(0, 3, "评分")
    sheet.write(0, 4, "作者")
    sheet.write(0, 5, "简介")
    for i in range(0,10):
        main(i)
    book.save(u"豆瓣电影TOP250.xls")#xlsx.save( path )保存文件
    print("爬取完成")

遇到的问题

1.如果打开了系统代理,运行的时候可能会报错

2.book.save()保存的是xls文件,因此命名的文件格式也应该是xls,不然会显示格式损坏,无法打开文件

3.爬取的有些部分值可能是空的,比如这里的item_quote有时为空,所以要注意加以判断

4.写入的内容必须与工作簿的编码一致,否则在保存的时候会报错,比如,设置编码为utf-8,那么所有写入的内容都必须是utf-8的编码

from bs4 import BeautifulSoup
import requests
import xlwt
def main(page):
    url="https://movie.douban.com/top250?start="+str(page*25)+"&filter="
    html=request_douban(url)
    soup=BeautifulSoup(html,"lxml")
    #solve_html(soup)
    save_to_excel(soup)
#请求豆瓣电影
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',
        response=requests.get(url=url,headers=headers)
        if response.status_code==200:
            return response.text
    except requests.RequestException:
        return None
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
        if item.find(class_='inq') is not None:
            item_quote = item.find(class_="inq").string
        else:
            item_quote=""
        item_author = item.find(class_="bd").find(class_="").text
        print("爬取电影:" + item_name + "|" + item_score + "|" + item_quote)
        global n
        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_quote)
    return None
if __name__=="__main__":
    n = 1
    book = xlwt.Workbook()
    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, "简介")
    for i in range(0,10):
        main(i)
    book.save(u"豆瓣电影TOP250.xls")
    print("爬取完成")
                            
java gui 菜鸟教程 java教程菜鸟教程

Java 实例 - 判断数组是否相等以下实例演示了如何使用 equals ()方法来判断数组是否相等:import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { int[] ary = {1,2,3,4,5,6};