Python3爬虫豆瓣电影TOP250将电影名写入到EXCEL

大家好,我是你们的老朋友泽哥,最近在学习Python3.6,于是兴起写了个小小的爬虫

今天我们要爬取得页面是豆瓣电影TOP250,连接如下:http://movie.douban.com/top250?start=0&filter=&type=

附上截图!


 

我们要获得TOP250对应的电影名,打开F12对HTML报文进行解读

电影名对应的HTML代码如下:

<span class="title">肖申克的救赎</span>                 
整体代码如下:

文件:get_movieReview.py

from urllib import request
from urllib import error
import re
import excel


excel_name = 'excel/douban_hot_review.xls'
sheet_name = '豆瓣影评'


'''创建一个excel'''
douban_excel = excel.Excel(excel_name,sheet_name)

class DouBanSpider(object):
    '''
    数据成员:
    page:        表示当前处理的页面
    cur_url:     表示当前准备抓取的页面
    '''
    def __init__(self):
        self.page = 1
        self.cur_url = 'http://movie.douban.com/top250?start={page}&filter=&type='#{page}是可以代替的
        self.top = 0
        print('开始工作')

    '''
    cur_page:表示当前处理的界面
    return:返回抓取的整个界面的HTML(uicode编码)
    '''
    def get_html(self,cur_page):
        url = self.cur_url
        try:
            page = request.urlopen(url.format(page = (cur_page - 1) * 25)).read().decode("utf-8")
        except error.URLError as e:
            if hasattr(e,'code'):
                print("HTTPError: the server could not deal with the request")
                print("Error code: %s"% e.code)
            elif hasattr(e,'reason'):
                print("URLError: failed to reach the server")
                print("Reason: %s"% e.reason)
        return page

    '''
    page:表示当前抓取到的html文件
    功能:将匹配到的内容写入到excel文件中
    '''
    def find_Info(self,page):
        movie_items = re.findall(r'<span.*?class="title">(.*?)</span>',page,re.S)
        number = 0
        for index,item in enumerate(movie_items):
         #   print('编号:' + str(index))
         #   print('编号对应的字符串:' + str(item))
            if item.find(" ") != 0 and item.find("&nbsp") == -1:
                douban_excel.write(self.top,0,item)
                self.top += 1
                print('第' + str(self.top) + '个电影名是:' + str(item))
        douban_excel.save()

    def start_spider(self):
        '''爬虫入口'''
        while self.page <= 10:
            page = self.get_html(self.page)
            self.find_Info(page)
            self.page += 1

def main():
    '''程序入口'''
    spider = DouBanSpider()
    spider.start_spider()

if __name__ == '__main__':
    main()

  self.cur_url = 'http://movie.douban.com/top250?start={page}&filter=&type='
注意,标红的地方用到了字符串匹配,第一页start=0,第二页start=25···以此类推,每增加一页,start值增加25。

具体的python3的format函数用法请撮这里!



文件:excel.py

import xlrd
import xlwt
import os

class Excel:
    def __init__(self,excel_name,sheet_name):
        global bookWrite
        global bookRead
        global sheet

        self.excel_name = excel_name
        self.sheet_name = sheet_name

        bookWrite = xlwt.Workbook(encoding = 'utf-8')
        sheet = bookWrite.add_sheet(sheet_name,cell_overwrite_ok = True)

    #写数据到excel
    def write(self,row,col,data):
        sheet.write(row,col,data)

    #保存数据到文件
    def save(self):
        if os.path.exists(self.excel_name):
            os.remove(self.excel_name)
            bookWrite.save(self.excel_name)
        else:
            bookWrite.save(self.excel_name)

    #读取excel数据;单元格
    def read(self,sheet_index,row,col):
        bookRead = xlrd.open_workbook(self.excel_name)
        sheet = bookRead.sheet_by_index(sheet_index)
        return sheet.cell(row,col).value    #根据行与列获取单元格值

    #读取excel数据:单行数据
    def read_by_row(self,sheet_index,row):
        bookRead = xlrd.open_workbook(self.excel_name)
        sheet = bookRead.sheet_by_index(sheet_index)     # 根据索引获取工作表
        return sheet.row_values(row)

    #读取excel数据:单列数据
    def read_by_col(self,sheet_index,col):
        bookRead = xlrd.open_workbook(self.excel_name)
        sheet = bookRead.sheet_by_index(sheet_index)
        return sheet.col_values(col)
这个小爬虫给我的收获还是很多的,每一个电影都能爬出两个相同标签的<span class="title">,区别在于第二个标签内容的开头是空格,可能是因为解析html需要用到“utf-8”编码吧,在遇到非中文的html代码时,空格变成了&nbsp;所以真正的电影名的标签里需要满足以下两点条件:1.没有&nbsp;2.不能是空格开头。说这么多了,大家自己看一看html就知道个所以然了!
代码下载:http://download.csdn.net/download/qq_35747066/10237746



  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值