自定义获取豆瓣网电影TOP250里的排名数量

主要思路:先由requests库获取html基本信息,然后用BeautifulSoup来进行html.parser格式解析,逐个获取Tag属性,并且对内容进行字符串切片,字符串匹配,保存得到电影名称,地点,日期。

  1. from bs4 import BeautifulSoup
  2. import requests
  3. import re
  4.  
  5. #由于中文编码的原因需要重新计算中文所占长度
  6. def SuperLen(s):
  7. sum_len=len(s)
  8. chi_len=len(re.sub('[a-zA-Z]','',s))
  9. eng_len=sum_len-chi_len
  10. return (chi_len*2+eng_len)
  11. #此函数功能是准确得到中英文混合字符串所占长度
  12.  
  13. #由于每页只有25个电影,所以用户需求电影数目不同页数(URL)也就不同
  14. def Get_Page(n):
  15. if n%25!=0:
  16. num=int(n/25)+1
  17. else:
  18. num=int(n/25)
  19. return num
  20. #此函数功能是获取页数
  21.  
  22. #根据所需参数页数来对应不同的URL
  23. def Num_Get_Soup(n):
  24. url='https://movie.douban.com/top250?start='+str(n)+'&filter='
  25. resul=requests.get(url)
  26. soup=BeautifulSoup(resul.text,'html.parser')
  27. return soup
  28. #此函数功能就是对URL进行requests.get 以获取对应的BeautifulSoup
  29.  
  30. #使用BeautifulSoup
  31. def Get_Name_Date_Locat(nums):
  32. NAME=[]
  33. Date=[]
  34. Locat=[]
  35. for j in range(Get_Page(nums)): #获取页数,进行循环操作
  36. soup=Num_Get_Soup(j*25) #根据不同页数的不同URL获取soup
  37. Name_temp=soup.find_all('img','',limit=25) #获取名称Tag,数目最大且为25
  38. Date_Locat_temp=soup.find_all('p','',limit=25)#获取日期 地点Tag
  39. for i in Name_temp:
  40. NAME.append(i.attrs['alt']) #对获取的Tag获取属性
  41. for l in Date_Locat_temp:
  42. stemp=str(l)
  43. Date.append(re.sub('\D','',stemp.split('\xa0')[-5])[:4]) #对字符串切片后进行字符串匹配获取数字日期
  44. Locat.append(stemp.split('\xa0')[-3]) #字符串切片获取地点
  45. return (NAME,Date,Locat)
  46.  
  47. #此函数功能是格式化写入文件
  48. def Write_text(n,N,D,L):
  49. f=open('result.txt','w')
  50. for i in range(n):
  51. f.write(N[i]+'{}\t'.format((35-SuperLen(N[i]))*' '))
  52. f.write(L[i]+'{}\t'.format((70-len(L[i]*2))*' '))
  53. f.write(D[i])
  54. f.write('\n')
  55. f.close()
  56.  
  57. #函数的开始
  58. def Start():
  59. nums=eval(input('请输入要爬取排名的个数0-250均可'))
  60. print('Please Waitng........')
  61. Name,Date,Locat=Get_Name_Date_Locat(nums)
  62. Write_text(nums,Name,Date,Locat)
  63. print('Complete!')
  64.  
  65. Start()

效果图:

可改进思路:正则表达和字符串切片的使用可以再合理一些,格式化保存文件也可以再简化。

一个python小爬虫的更多相关文章

  1. 第一个Python小爬虫

    这个爬虫是参考http://python.jobbole.com/81353/这篇文章写的 这篇文章可能年代过于久远,所以有些代码会报错,然后我自己稍微修改了一下,增加了一个getContentAll ...

  2. 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)

    用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气

  3. Day1:第一个python小程序

    Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...

  4. 第一个python小脚本

    第一个python小实验 前言 作为一个工作1年的linux运维搬砖师来说,发现没点开发能力真的是不好混啊.于是下定决心学习python! 直接上刚写的语句(大神莫鄙视) 通过控制台输入一个账号密码, ...

  5. 【现学现卖】python小爬虫

    1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...

  6. python小爬虫练手

    一个人无聊,写了个小爬虫爬取不可描述图片.... 代码太短,就暂时先往这里贴一下做备份吧. 注:这是很严肃的技术研究,当然爬下来的图片我会带着批判性的眼光审查一遍的....   :) #! /usr/ ...

  7. Python 小爬虫流程总结

    接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...

  8. Python小爬虫-自动下载三亿文库文档

    新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?o ...

  9. 发布一个Python小程序:ManHourCalendar

    程序诞生的那些事儿 先聊聊背景资料档案.. 大约两年前,我只身前往岛国赚点外快.在那边的派遣制度工作中,存在一个大约叫每月的标准工作时间的概念,按照自家公司跟派遣目标公司(业界称为现场)的合同,规定了 ...

随机推荐

  1. Windows 2008 安装Sql server 2005

    Windows 2008 安装Sql server 2005 进入下载的文件中,双击打开:splash.hta 文件进行安装 根据自己的系统来选择性进行安装,这里我们选择第二项:基于 x64 的操作系 ...

  2. Python爬虫入门之Cookie的使用

    本节我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要 ...

  3. 请解释ASP.NET 中的web 页面与其隐藏类之间的关系?

    一个ASP.NET 页面一般都对应一个隐藏类,一般都在ASP.NET 页面的声明中指定了隐藏类例如一个页面 Tst1.aspx 的页面声明如下 <%@ Page language="c ...

  4. EM算法(期望最大化算法)

    适用场景:存在为未测变量的情况下,对模型参数进行估计. EM算法: input:观测数据Y,为观测数据Z,联合分布P(Y,Z|θ),条件分布P(Z|Y,θ) output:模型参数θ 步骤: (1)选 ...

  5. Spine用于Timeline(NullReferenceException: Object reference not set to an instance of an object pine.Unity.Editor.AnimationReferenceAssetEditor.OnInspectorGUI ())

    报错信息:Spine.Unity.Editor.AnimationReferenceAssetEditor.OnInspectorGUI () (at Assets/Extention/Spine/E ...

  6. 使用Pretues仿真Arduino驱动步进电机

    这几天想做一个给金鱼自动喂食的装置,所以学习了下如何操控步进电机,现在做个记录. 使用Pretues仿真Arduino的话,可以参考:http://www.geek-workshop.com/thre ...

  7. python写mapReduce初步

    最近在学了python了,从mapReduce开始 ,话不多说了,直接上代码了哈 map阶段,map.py文件 import sys # 标准输入 # 在终端的话,就需要这样了 cat a.txt | ...

  8. Arm11-mini6410入坑

    Mini6410 学习Stm32的时候原子哥的资料真全啊,而且原子哥在他论坛也解答问题.然而现在学习ARM买了一套友善之臂的开发板,官方的资料只能刚好入门而已,其实入门都算不上.看了一下,网上的资料很 ...

  9. 实现鼠标悬停,div勾画div边框的动画

    鼠标悬浮,边框div边框的动画样式,效果图如下: 首先定义div及其样式: <style> .show { width:300px; height:200px; border:1px so ...

  10. html css+div+jquery实现图片轮播

    一直想自己动手做一个图片轮播的控件,查查网上的资料大多引用已经做好的组件,其原理算法不是很清楚,于是自己用jquery写了一个.先看下效果图: 主要界面实现思路如下: 1.新建一个div宽度为100% ...