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

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

from bs4 import BeautifulSoup
import requests
import re #由于中文编码的原因需要重新计算中文所占长度
def SuperLen(s):
sum_len=len(s)
chi_len=len(re.sub('[a-zA-Z]','',s))
eng_len=sum_len-chi_len
return (chi_len*2+eng_len)
#此函数功能是准确得到中英文混合字符串所占长度 #由于每页只有25个电影,所以用户需求电影数目不同页数(URL)也就不同
def Get_Page(n):
if n%25!=0:
num=int(n/25)+1
else:
num=int(n/25)
return num
#此函数功能是获取页数 #根据所需参数页数来对应不同的URL
def Num_Get_Soup(n):
url='https://movie.douban.com/top250?start='+str(n)+'&filter='
resul=requests.get(url)
soup=BeautifulSoup(resul.text,'html.parser')
return soup
#此函数功能就是对URL进行requests.get 以获取对应的BeautifulSoup #使用BeautifulSoup
def Get_Name_Date_Locat(nums):
NAME=[]
Date=[]
Locat=[]
for j in range(Get_Page(nums)): #获取页数,进行循环操作
soup=Num_Get_Soup(j*25) #根据不同页数的不同URL获取soup
Name_temp=soup.find_all('img','',limit=25) #获取名称Tag,数目最大且为25
Date_Locat_temp=soup.find_all('p','',limit=25)#获取日期 地点Tag
for i in Name_temp:
NAME.append(i.attrs['alt']) #对获取的Tag获取属性
for l in Date_Locat_temp:
stemp=str(l)
Date.append(re.sub('\D','',stemp.split('\xa0')[-5])[:4]) #对字符串切片后进行字符串匹配获取数字日期
Locat.append(stemp.split('\xa0')[-3]) #字符串切片获取地点
return (NAME,Date,Locat) #此函数功能是格式化写入文件
def Write_text(n,N,D,L):
f=open('result.txt','w')
for i in range(n):
f.write(N[i]+'{}\t'.format((35-SuperLen(N[i]))*' '))
f.write(L[i]+'{}\t'.format((70-len(L[i]*2))*' '))
f.write(D[i])
f.write('\n')
f.close() #函数的开始
def Start():
nums=eval(input('请输入要爬取排名的个数0-250均可'))
print('Please Waitng........')
Name,Date,Locat=Get_Name_Date_Locat(nums)
Write_text(nums,Name,Date,Locat)
print('Complete!') 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. 坦克大战学习笔记-TankWar

    最近学习了马士兵老师直播的单机版坦克大战,模仿的做了一个,整理一下思路记录下来,项目git地址:https://github.com/zhuchangli/TankWar/tree/master 视频 ...

  2. [Oracle][DATAGUARD]关于REDO_TRANSPORT_USER参数

    大家可能已经知道,在Oracle的DATAGUARD(这里指的是PHYSICAL STANDBY)环境中,Primary端会把生成的REDO传到Standby端,然后由Standby端的MRP进程应用 ...

  3. python orm框架

    #!/usr/bin/python# -*- coding: utf-8 -*-from sqlalchemy import create_enginefrom sqlalchemy import T ...

  4. nodejs02-fs模块

    文件操作模块:fs-filesystem(异步) //readFile(文件名,回调函数) fs.readFile(); fs.readFile("aaa.txt",functio ...

  5. alibaba/druid 下的 密码加密

    使用ConfigFilter cliangch edited this page on 3 Feb · 12 revisions ConfigFilter的作用包括: 从配置文件中读取配置 从远程ht ...

  6. python基础(字典)

    #实现同样的功能,代码越少越好#非空即真,非0即真#not 取反 a = []b = ' 'c = ()d = 0e = Noneif a: print('真的')else: print('假的') ...

  7. tensorFlow入门实践(一)

    首先应用TensorFlow完成一个线性回归,了解TensorFlow的数据类型和运行机制. import tensorflow as tf import numpy as np import mat ...

  8. java中字符串“不可变性”的破坏,使用反射破坏final属性。以及涉及到字符串常量池的问题。

    大家都清楚java中String类是不可变的,它的定义中包含final关键字.一旦被创建,值就不能被改变(引用是可以改变的). 但这种“不可变性”不是完全可靠的,可以通过反射机制破坏.参考一下代码: ...

  9. ansible小计

    一.忽略hosts,只在一台机器上执行: /usr/local/bin/ansible-playbook /app/ansiblecfg/ztr/ent_extract.yml --limit=10. ...

  10. Java编程思想 - 第11章 持有对象

    · 大量笔记存放在Github Java文件中,请移步查看:https://github.com/iGuure/AndroidCodeHub/tree/master/Java%20pratice/Th ...