Python爬取豆瓣电影Top250数据
来源:互联网 发布:电子数据交换业务 编辑:程序博客网 时间:2024/04/29 08:03
初学pyhton,自己找个练手任务。爬取豆瓣电影top250,保存为一个DataFrame数据格式,留待分析.(代码粗糙,留存)
具体要配合豆瓣电影的HTML看代码
url=‘https://movie.douban.com/top250?start=%d&filter=’
from bs4 import BeautifulSoupfrom urllib.request import urlopenimport pandas as pdimport numpy as npfrom pandas import DataFrame,Seriesimport redef split(str,regular): #正则表达式过滤字符串 return re.split(regular,str)def trans_list(main_list,sub_list): index=main_list.index(sub_list) sub_list.reverse() #反转list的排列 for ele in sub_list: main_list.insert(index,ele) #后一以元素插入在前一元素之前 main_list.pop(main_list.index(sub_list)) return main_listdef extract_info(li_tag): #使用.stripped_strings更方便 info=[] for string in li_tag.stripped_strings: info.append(string) #info=['1', '肖申克的救赎', '/\xa0The Shawshank Redemption', '/\xa0月黑高飞(港) / 刺激1995(台)', #'[可播放]', '导演: 弗兰克·德拉邦特 Frank Darabont\xa0\xa0\xa0主演: 蒂姆·罗宾斯 Tim Robbins /...', #'1994\xa0/\xa0美国\xa0/\xa0犯罪 剧情', '9.6', '693081人评价', '希望让人自由。'] if '[可播放]' in info: index=info.index('[可播放]') info.pop(index) #delete unused info,the index-1 class_hd=li_tag.find('div',{'class':'hd'}) if len(class_hd.a.find_all('span'))==2: if ' / ' in info[2]: info.insert(2,np.NaN) #缺失则插入NaN,注意index info[3]=info[3][2:] else: info[2]=info[2][2:] info.insert(3,np.NaN) else: info[2]=info[2][2:] #MovieName,\xa0表示16进制下A0的一个数,为一个字符 info[3]=info[3][2:] #EnglishName Dir_and_Act=split(info[4],r':|\xa0\xa0\xa0') #正则表达式分割字符串 if len(Dir_and_Act)<4: Dir_and_Act.append('NaN') Yea_Cou_Gen=split(info[5],r'\xa0/\xa0') info[4]=Dir_and_Act info[5]=Yea_Cou_Gen info=trans_list(info,Dir_and_Act) info=trans_list(info,Yea_Cou_Gen) info.pop(4) #去除‘导演’ info.pop(5) #起初’演员‘ return info #返回一行movie的数据,list的形式def collecting_data(url,database): soup=BeautifulSoup(urlopen(url),'lxml') movie_grid=soup.find_all('ol',{'class':'grid_view'}) #找到电影表单 movie=movie_grid[0].find_all('li') for li in movie: database.append(extract_info(li)) #data为list前提下,DataFrame([data])为行排列,DataFrame(data)为列排列 return database #database=[[],[],[],....]def collect_all(url): database=[] collecting_data(url,database) data=pd.DataFrame(database) return data #返回一行daframe格式#mian#url=r'https://movie.douban.com/top250?start=0&filter='#豆瓣电影top250地址page=[]for sequence in list(range(0,250,25)): url=r'https://movie.douban.com/top250?start=%d&filter=' %sequence #所有top250的网页地址 page.append(collect_all(url)) #添加数据GeneralData=pd.DataFrame()for i in range(len(page)): GeneralData=pd.concat([GeneralData,page[i]],ignore_index=True) #pd.concat:[]内要为DataFrame形式,#保存数据,待整理分析GeneralData=GeneralData.drop(0,axis=1) #去除编号的一列column=['MovieName','EnglishName','OtherName','Director',\ 'Actors','Year','Country','Grenre','Rating10','RatingNum',\ 'Description']GeneralData.columns=columnGeneralData.to_csv('MovieTop250.csv',encoding='utf-8') #此函数默认解码方式为utf-8,但是在保存时不加encoding的话,读取会产生错误GeneralData.to_csv('Movie.csv')
数据结果如下图:
0 0
- Python爬取豆瓣电影Top250数据
- Python爬取豆瓣电影top250
- python+beautifulsoup爬取豆瓣电影TOP250
- Python爬取豆瓣电影top250
- python爬取豆瓣电影Top250
- python爬取豆瓣电影top250
- python爬豆瓣电影Top250
- 用Python爬虫爬取豆瓣TOP250电影
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
- python中lxml+cssselect爬取豆瓣电影Top250
- [Python/爬虫]利用xpath爬取豆瓣电影top250
- Python爬虫实战(一):爬取豆瓣电影top250排名
- Python 爬取豆瓣电影Top250(一)
- python爬虫爬取豆瓣top250电影影评
- nodejs爬取豆瓣top250电影信息
- scrapy爬取豆瓣TOP250电影
- scrapy ------ 爬取豆瓣电影TOP250
- 使用requests爬取豆瓣电影top250
- 《JAVA继承与多态》【Person、Student、Employee类】(注:此题在书上原题基础上有修改)设计一个名为Person的类和它的两个名为Student和Employee子类。
- 在Windows上玩TensorFlow(一)——安装Docker
- 4种方法让SpringMVC接收多个对象
- String——求没有重复字符的最长的子串
- js实现排序算法(冒泡、选择、插入、二分插入、快速、希尔)
- Python爬取豆瓣电影Top250数据
- java并发编程之1——synchronized和volatile
- Android的编程初体验--布局管理器
- 斜率优化dp专题学习
- SQL SERVER getdate获取系统当前时间
- Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
- 子元素水平垂直居中
- Http请求
- 多连块(c++ 模拟法)