python 第一站,豆瓣-美国末日评论小爬虫

最近学习python,但是光是看书看视频学习,总是觉得掌握的不够扎实。所以就决定自己去写写爬虫,当带着目的性去学,也许更容易发现自己需要什么。这是酝酿多日之后的第一个作品,简单的不能再简单的一个小爬虫。

使用工具:

  • python3 (windows环境)
  • re , urllib , urllib2 , json(这几个是python基本库中的,虽然json好像没用到— —!)
  • BeautifulSoup4(非python基本库,需要自己安装)

思路:

首先,使用urllib将url解析成html文本,然后用BeautifulSoup将html文本解析成BeautifulSoup类型的对象,然后去查看对应元素的值以及文本,通过python去分析这些数据,最后给出结果。

代码:

# -*- coding: utf-8 -*-
import urllib , json , string , re
from urllib import request
from bs4 import BeautifulSoup as BS def UrlToHtml(url):
a = urllib.request.urlopen(url)
b = a.readlines()
for i in range(0,len(b)):
b[i] = b[i].decode('utf-8')
b = ''.join(b)
return b def ToUrl(Page):
Nums = int(Page)*20
url = 'https://www.douban.com/game/25889245/comments?start='+str(Nums)+'&sort=score'
return url page = 0
while True:
Url = ToUrl(page)
Html = UrlToHtml(Url)
soup = BS(Html,'html.parser')
list_a = []
list_b = []
for Li in soup.findAll('li',class_='comment-item'):
list_a.append(Li)
for Li in list_a:
star_f = Li.find(name = 'span', attrs = { 'class' : re.compile(r'allstar..')})
if star_f == None:
list_b.append('未打分')
else:
list_b.append(dict(star_f.attrs)['title'])
for i in range(0,len(list_b)):
if list_b[i] == str('未打分'):
print('第{}页第{}楼,没有打分'.format(page+1,i+1))
elif list_b[i] == str('推荐'):
print('第{}页第{}楼,没有给5星评价'.format(page+1,i+1))
page+=1
if len(list_a) < 2 :
break

知识点:

  • from urllib import request , urllib.request.urlopen(url) , 将url解析成html文本 , 但是解析后类型为bytes,中文显示乱码 , 所以用html.decode('utf-8')将它的类型转化成str
  • soup = BeautifulSoup(Html,'html.parser')将html文本转化成BeautifulSoup对象
  • 使用soup.find 和 soup.findAll 以及正则表达式获取需要的数据

python第一站的更多相关文章

  1. 小白学习django第一站-环境配置

    Django简单来说就是用Python开发的一个免费开源的Web框架 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 开搞!!! 工具准备: linux(ubuntu) + py ...

  2. CSDN高校俱乐部2013年秋季北京地区第一站“编程语言的应用及其发展”—北京联合大学

    2013年12月11日晚17:00.CSDN高校俱乐2013年秋季北京地区第一站“编程语言的应用及其发展”在北京联合大学进行. 首先,CSDN总部人员介绍CSDN俱乐部的改版以及线上编程挑战赛.CSD ...

  3. Python第一天 安装 shell 文件

    Python第一天  安装  shell  文件 python里面一切都是对象 object 代码缩进:建议用四个空格来缩进,不要用tab键 安装 Linux自带python,windows需要下载m ...

  4. Python第一天——入门Python(1)数据定义

    数据类型: 什么是数据? 在计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字字母.符号和模拟量等的统称.现在计算机存储和处 ...

  5. Python 第一课笔记

    1.Hello World程序的两种方法     在windows下执行 1.编辑器里输入,不用编译 print("Hello World!") 直接就可以运行      2.可以 ...

  6. 简学Python第一章__进入PY的世界

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  7. Python第一行代码

    Python版本:Python 3.6.1 0x01 命令行交互 在交互式环境的提示符>>>下,直接输入代码,按回车,就可以立刻得到代码执行结果.现在,试试输入100+200,看看计 ...

  8. python第一周总结

    这一周将开启学习python第一周,开始之前学过python但是没有学精,到现在基本快忘记了,只能记住大概什么样子了emmm 作业计算bmi 这周作业为计算bmi,小明身高1.75,体重80.5.请根 ...

  9. YOU种你来丨i春秋校园行第一站北京电子科技学院

    发通告啦 i春秋互联网安全校园行即将火爆开启,第一站我们将来到北京电子科技学院.对网络安全感兴趣的大学生们注意啦,我们将走进校园送福利,Are you ready? i春秋简介 i春秋拥有全国最大的网 ...

随机推荐

  1. Spark集群部署

    Spark是通用的基于内存计算的大数据框架,可以和hadoop生态系统很好的兼容,以下来部署Spark集群 集群环境:3节点 Master:bigdata1 Slaves:bigdata2,bigda ...

  2. asp.net中membership使用oracle数据库(二)

    需要安装的东西都准备好了,继续生成后台表.过程.函数.触发器等.ps/sql中 @@E:\oracle\product\11.2.0\client_1\ASP.NET\SQL\InstallAllOr ...

  3. SAP 销售订单的文本项目

    http://blog.itpub.net/9859323/viewspace-616508/ ls_hdname = wa_vbak-vbeln .     CALL FUNCTION 'READ_ ...

  4. 链表原地反转Demo

    现在就是Qt开发和给师弟师妹讲下数据结构吧,感觉还挺漫长的,上个Qt帖子等我把成品做出来再更. //Convert_plug.h #ifndef CONVERT #define CONVERT #de ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第16章:Intel处理器的分页机制和动态页面分配

    第16章讲的是分页机制和动态页面分配的问题,说实话这个一开始接触是会把人绕晕的,但是这个的确太重要了,有了分页机制内存管理就变得很简单,而且能直接实现平坦模式. ★PART1:Intel X86基础分 ...

  6. Git TortoiseGit SSH设置

    Git TortoiseGit SSH设置 http://www.cnblogs.com/ChenRihe/p/Git_TortoiseGit_SSH.html TortoiseGit默认的SSH客户 ...

  7. ref的用法

    ref可以修改变量作为参数调用的值,但必须要初始化,不能在调用的函数中初始化 static void Main(string[] args) { ; Console.WriteLine("m ...

  8. 分享Kali Linux 2016.2第50周镜像文件

    分享Kali Linux 2016.2第50周镜像文件Kali Linux官方于12月11日发布Kali Linux 2016.2的第50周镜像.这次保持以往规律,仍然是11个镜像文件.默认的Gnom ...

  9. Daily Scrum Meeting ——FifthDay

    一.Daily Scrum Meeting照片 牛姐去工程师那边了,已经在群里给我汇报了.橙汁去北京参加ICPC了 二.Burndown Chart 渐入佳境了,最后一礼拜了 三.项目进展 1.实现注 ...

  10. Spring任务调度之Quartz

    一.Quartz作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.Quart ...