首页 > 编程语言 >Python3爬虫豆瓣电影TOP250将电影名写入到EXCEL

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

时间:2022-11-03 22:37:41浏览次数:71  
标签:index sheet name 电影 self excel EXCEL TOP250 page


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

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

附上截图!

Python3爬虫豆瓣电影TOP250将电影名写入到EXCEL_数据



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

Python3爬虫豆瓣电影TOP250将电影名写入到EXCEL_数据_02

电影名对应的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(" ") == -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就知道个所以然了!





标签:index,sheet,name,电影,self,excel,EXCEL,TOP250,page
From: https://blog.51cto.com/u_13121994/5821253

相关文章

  • 一步一步地教你实现OLE读取EXCEL(一)
    OLE实现EXCEL读取的动态链接库的具体步骤1.环境搭建:我们需要什么环境背景呢?我用的是VS2015+MicrosoftExcel2015,这里强调一下OLE不能在WPS上进行,因为OLE需要调用微软的......
  • 3.9 使用Python操作Excel表格的样式1
    #获取表格单元格,修改字体样式修改字体样式 Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)获取表格中字体的样式cell.font.属性......
  • .Net Excel 的帮助方法
    ///<summary>///读取Excel流到DataSet///</summary>///<paramname="stream">Excel流</param>///<paramname="dict">......
  • MySQL导出表数据为Excel文件时变成E+15【原创】
    如标题所示,因为Excel数据格式变成E+15导致查出的数据不准确。上午百度也没搜出好的方法。想到了一个笨办法,先将文件导成txt,然后用UE列模式在数据前加一列单引号,在黏贴到Ex......
  • 转:Excel教程:excel位数不足补0公式的两种写法
    内容提要:关于excel位数不足补0公式,一般是使用text函数来占位。比如excel数字前面补0成为八位,就可以使用这个方法。今天给大家分享excel位数不足补0公式的两种写法,分别使用......
  • 高德地图搜索结果如何导出成excel里?
    前段时间,根据朋友的要求,开发了地图里的商家采集工具。地图商家如何导出?电话如何导出EXCEL?现在很多做销售工作的思路都开阔了,从地图上直接找商家推销。但是普遍反映一个......
  • 转:关于Excel中截取字符串操作,这一篇就足够了
    在数据分析的时候,一些数需要经过加工之后才能使用。数据分析最常用就是对单元格数据的提取,这就要求我们要对单元格进行加工,从而更好的应用这些数据。  Left函数:......
  • c# winform使用NOPI读取Excel读取图片
    需求:在Winform使用NOPI做导入时候,需要导入数据的同时导入图片。虽然代码方面不适用(我好像也没仔细看过代码),但是感谢大佬给了灵感http://www.wjhsh.net/IT-Ramon-p-13100......
  • 盘点一个使用Python实现Excel数理统计的实战问题
    大家好,我是皮皮。一、前言前几天在小小明大佬的Python交流群中遇到一个粉丝问了一个使用Python实现Excel数理统计的实战问题,觉得还挺有用的,这里拿出来跟大家一起分享下。......
  • #yyds干货盘点#JS 解析 excel 文件
    JS解析excel文件分为如下几步:使用 ​​js​​ 解压缩 ​​excel​​ 文件获取到其中的 ​​sheet​​ 文件内容,然后将 ​​xml​​ 数据解析出来将数据转换成我们想......