一个python小爬虫
自定义获取豆瓣网电影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小爬虫的更多相关文章
- 第一个Python小爬虫
这个爬虫是参考http://python.jobbole.com/81353/这篇文章写的 这篇文章可能年代过于久远,所以有些代码会报错,然后我自己稍微修改了一下,增加了一个getContentAll ...
- 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)
用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气
- Day1:第一个python小程序
Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...
- 第一个python小脚本
第一个python小实验 前言 作为一个工作1年的linux运维搬砖师来说,发现没点开发能力真的是不好混啊.于是下定决心学习python! 直接上刚写的语句(大神莫鄙视) 通过控制台输入一个账号密码, ...
- 【现学现卖】python小爬虫
1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...
- python小爬虫练手
一个人无聊,写了个小爬虫爬取不可描述图片.... 代码太短,就暂时先往这里贴一下做备份吧. 注:这是很严肃的技术研究,当然爬下来的图片我会带着批判性的眼光审查一遍的.... :) #! /usr/ ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- Python小爬虫-自动下载三亿文库文档
新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?o ...
- 发布一个Python小程序:ManHourCalendar
程序诞生的那些事儿 先聊聊背景资料档案.. 大约两年前,我只身前往岛国赚点外快.在那边的派遣制度工作中,存在一个大约叫每月的标准工作时间的概念,按照自家公司跟派遣目标公司(业界称为现场)的合同,规定了 ...
随机推荐
- use this method get wifi from notebook
sudo apt dist-upgrade http://cache.baiducontent.com/c?m=9d78d513d9981de90fb3837e7c478a265b09c0307a8c ...
- python1-集合、函数-(全局变量与局部变量)
集合 # s=set('hello')# print(s)## s=set(['alex','alex','sb'])# print(s) # s={1,2,3,4,5,6} #添加# s.add(' ...
- DAY2练习-购物车
print('欢迎访问购物车')money = int(input('为方便购物,请输入您的总资产:')) #输入金钱必须为数字类型shopping_price_list = [{"name ...
- No space left on device Linux系统磁盘空间已满
1. 删除系统日志等 删除生成 core,mbox等文件 #find / -name core|xargs rm –rf 删除日志 2.重起机器
- 6 python高级数据处理和可视化
6.2. pyplot作图 1.折线图和散点图 t = np.arange(0,4,0.1) plt.plot(t,t,'o',t,t+2,t,t**2,'o') plt.show() 2.柱线图 p ...
- 常用的settings.xml文件
<?xml version="1.0"?> <settings> <localRepository>/Users/bernie.cx/.m2/r ...
- python基础 字典练习
练习1:info = [ {'wangming': { 'money':1111, 'car':['bmo','bsj'], 'info':{ 'phone':1511111, 'age':18} } ...
- cocos大量对象使用动作注意事项
,,} for i,v in ipairs(area) do if gameResult == v then ]) do local scale_1 = cc.ScaleTo:create(0.05, ...
- pytest自动化7:assert断言
前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...
- linux修改默认语言
echo $PATH #查看当前语言LANG=en_US.UTF-8 #临时修改当前语言,修改为英文echo 'LANG=en_US.UTF-8' > /etc/sysconfig/i18n # ...