Python爬虫-豆瓣电影 Top 250,,爬取的网页地址为:h
Python爬虫-豆瓣电影 Top 250,,爬取的网页地址为:h
爬取的网页地址为:https://movie.douban.com/top250
打开网页后,可观察到:TOP250的电影被分成了10个页面来展示,每个页面有25个电影。
那么要爬取所有电影的信息,就需要知道另外9个页面的URL链接。
第一页:https://movie.douban.com/top250
第二页:https://movie.douban.com/top250?start=25&filter=
第三页:https://movie.douban.com/top250?start=50&filter=
以此类推...
分析网页源代码:以首页为例
观察后可以发现:
所有电影信息在一个ol标签之内,该标签的 class属性值为grid_view;
每个电影在一个li标签里面;
每个电影的电影名称在:第一个 class属性值为hd 的div标签 下的 第一个 class属性值为title 的span标签里;
每个电影的评分在对应li标签里的(唯一)一个 class属性值为rating_num 的span标签里;
每个电影的评价人数在 对应li标签 里的一个 class属性值为star 的div标签中 的最后一个数字;
每个电影的短评在 对应li标签 里的一个 class属性值为inq 的span标签里。
Python主要模块:requests模块BeautifulSoup4模块
>pip install requests
>pip install BeautifulSoup4
主要代码:
Top250.py1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #-*-coding:utf-8-*- importrequests#requests模块 frombs4importBeautifulSoup#BeautifulSoup4模块 importre#正则表达式模块 importtime#时间模块 importsys#系统模块 """获取html文档""" defgetHTMLText(url,k): try: if(k==0):#首页 kw={} else:#其它页 kw={‘start‘:k,‘filter‘:‘‘} r=requests.get(url,params=kw,headers={‘User-Agent‘:‘Mozilla/4.0‘}) r.raise_for_status() r.encoding=r.apparent_encoding returnr.text except: print("Failed!") """解析数据""" defgetData(html): soup=BeautifulSoup(html,"html.parser") movieList=soup.find(‘ol‘,attrs={‘class‘:‘grid_view‘})#找到第一个class属性值为grid_view的ol标签 moveInfo=[] formovieLiinmovieList.find_all(‘li‘):#找到所有li标签 data=[] #得到电影名字 movieHd=movieLi.find(‘div‘,attrs={‘class‘:‘hd‘})#找到第一个class属性值为hd的div标签 movieName=movieHd.find(‘span‘,attrs={‘class‘:‘title‘}).getText()#找到第一个class属性值为title的span标签 #也可使用.string方法 data.append(movieName) #得到电影的评分 movieScore=movieLi.find(‘span‘,attrs={‘class‘:‘rating_num‘}).getText() data.append(movieScore) #得到电影的评价人数 movieEval=movieLi.find(‘div‘,attrs={‘class‘:‘star‘}) movieEvalNum=re.findall(r‘\d+‘,str(movieEval))[-1] data.append(movieEvalNum) #得到电影的短评 movieQuote=movieLi.find(‘span‘,attrs={‘class‘:‘inq‘}) if(movieQuote): data.append(movieQuote.getText()) else: data.append("无") print(outputMode.format(data[0],data[1],data[2],data[3],chr(12288))) #将输出重定向到txt文件 output=sys.stdout outputfile=open("moviedata.txt",‘w‘,encoding=‘utf-8‘) sys.stdout=outputfile outputMode="{0:{4}^20}\t{1:^10}\t{2:^10}\t{3:{4}<10}" print(outputMode.format(‘电影名称‘,‘评分‘,‘评论人数‘,‘短评‘,chr(12288))) basicUrl=‘https://movie.douban.com/top250‘ k=0 whilek<=225: html=getHTMLText(basicUrl,k) time.sleep(2) k+=25 getData(html) outputfile.close() sys.stdout=output |
参考出处:https://blog.csdn.net/linzch3/article/details/62444947
Python爬虫-豆瓣电影 Top 250
评论关闭