糗百新鲜事——爬虫python
这个是学爬虫时的练习。
例子上面的用起来不太爽,就自己稍微改了下,练手用
1 # -*- coding:utf-8 -*- 2 # -------------------------------------------- 3 # 程序:【糗百最热】爬虫 4 # 版本:0.1 5 # 作者:Silence 6 # 日期:2014-03-25 7 # 操作:输入quit退出 8 # 功能:运行后按Enter键可以浏览今天的糗百热点 9 # --------------------------------------------- 10 11 import urllib 12 import urllib2 13 import re 14 import thread 15 import time 16 17 class HTML_Tool: 18 """定义一个工具类来处理页面上的各种标签""" 19 20 # 用 非贪婪模式匹配 \t 或者 \n 或者 空格 或者 超链接 或者 图片 21 bgnCharToNoneRex = re.compile("(\t|\n| |<a.*?>|<img.*?>)") 22 23 # 用 非贪婪模式 匹配任意的 <>标签 24 endCharToNoneRex = re.compile("<.*?>") 25 26 # 用 非贪婪模式 匹配任意的<p>标签 27 bgnPartRex = re.compile("<p.*?>") 28 charToNewLineRex = re.compile("(<br/>|</p>|<tr>|<div>|</div>)") 29 charToNewTabRex = re.compile("<td>") 30 31 # 将一些html的符号转变为原始符号 32 replaceTab = [("<","<"),(">",">"),("&","&"),("&","\""),(" "," ")] 33 34 def replace_Char(self,content): 35 content = self.bgnCharToNoneRex.sub("",content) 36 content = self.bgnPartRex.sub("\n ",content) 37 content = self.charToNewLineRex.sub("\n",content) 38 content = self.charToNewTabRex.sub("\t",content) 39 content = self.endCharToNoneRex.sub("",content) 40 41 for rt in self.replaceTab: 42 content = content.replace(rt[0],rt[1]) 43 return content 44 45 class QiuBai_Model: 46 """docstring for QiuBai_Model""" 47 def __init__(self): 48 self.page = 1 49 self.pages = [] 50 self.myTool = HTML_Tool() 51 self.enable = False 52 53 def getPage(self,page): 54 myurl = "http://m.qiushibaike.com/hot/page/" + page 55 56 #糗百现在加了过滤规则,不允许直接抓包了,所以这里伪造为一个浏览器请求 57 headers = { 58 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' 59 } 60 req = urllib2.Request( 61 url = myurl, 62 headers = headers 63 ) 64 myResponse = urllib2.urlopen(req) 65 myPage = myResponse.read() 66 # python中默认的编码是unicode编码 67 # String的encode是把unicode编码转换为其他编码的字符 68 # decode是把其他编码字符转换为unicode编码 69 unicodePage = myPage.decode("utf-8") 70 71 # 先找出所有包含新鲜事的结构 72 # 糗百页面中,所有新鲜事都写在形如<div class="content" title=""> 73 # 这里使用正则 74 myItems = re.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S) 75 items = [] 76 for item in myItems: 77 # 糗百中一个<div>标题时间;内容</div> 78 items.append([item[0].replace("\n",""),item[1].replace("\n","")]) 79 return items 80 81 # 加载新的段子 82 def loadPage(self): 83 # 如果用户没有输入quit就一直运行 84 while self.enable: 85 # 如果pages数组中的内容小于两个就获取新页面中的段子 86 if len(self.pages) < 2: 87 try: 88 myPage = self.getPage(str(self.page)) 89 self.page += 1 90 self.pages.append(myPage) 91 except: 92 print '无法链接糗事百科!' 93 else: 94 time.sleep(1) 95 96 def showPage(self,pageNum,page): 97 for items in pageNum: 98 print u"第%d页"%page, items[0] 99 print self.myTool.replace_Char(items[1]) 100 101 102 def start(self): 103 self.enable = True 104 page = self.page 105 106 print u'正在加载中,请稍后…………' 107 108 # 新启动一个线程,在后台进行加载,并存储 109 thread.start_new_thread(self.loadPage,()) 110 111 while self.enable: 112 if self.pages: 113 currentPage = self.pages[0] 114 del self.pages[0] 115 116 # 原来每显示一个就得按一次enter,太繁琐了,现在一次显示一页,瞬间高大上有木有 117 self.showPage(currentPage,page) 118 page += 1 119 120 myinput = raw_input('是否继续下一页?请按Enter键\n') 121 if myinput == "quit": 122 print '您本次观看到第 %d 页,欢迎下次再来!'%page 123 self.enable = False 124 break 125 126 if __name__ == '__main__': 127 print u""" 128 -------------------------------------------- 129 程序:【糗百最热】爬虫 130 版本:0.1 131 作者:Silence 132 日期:2014-03-25 133 操作:运行后输入enter,一次可以显示一页,输入quit退出 134 功能:就是看糗百最热栏的内容,由于现在还是爬虫爬的文字,所以,没有图片看了 135 --------------------------------------------- 136 """ 137 raw_input('请输入Enter键,精彩的糗百内容即将展示\n') 138 qiubai = QiuBai_Model() 139 qiubai.start()
转载于:https://www.cnblogs.com/SilenceCity/p/3639493.html
糗百新鲜事——爬虫python相关推荐
- python好学嘛-爬虫Python入门好学吗?学什么?
爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学.但要多看多练,有自己的逻辑想法.用Python达到自己的学习目的才算有价值.如果是入门学习了解,开始学习不难 ...
- 爬虫python是干什么的_爬虫是什么?能自学嘛
1.爬虫是什么 网络爬虫(web crawler 简称爬虫)就是按照一定规则从互联网上抓取信息的程序,既然是程序那和正常用户访问页面有何区别?爬虫与用户正常访问信息的区别就在于:用户是缓慢.少量的获取 ...
- python是什么意思中文、好学吗-爬虫Python入门好学吗?学什么?
爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学.但要多看多练,有自己的逻辑想法.用Python达到自己的学习目的才算有价值.如果是入门学习了解,开始学习不难 ...
- Python爬虫 | Python爬虫获取女友图片
Python爬虫 | Python爬虫获取女友图片 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生 ...
- python爬虫有多少种方式_python爬虫-----Python访问http的几种方式
爬取页面数据,我们需要访问页面,发送http请求,以下内容就是Python发送请求的几种简单方式: 会使用到的库 urllib requests 1.urlopen import urllib. ...
- 爬虫Python入门好学吗
爬虫Python入门好学吗?学爬虫需要具备一定的基础,有编程基础学Python爬虫更容易学.但要多看多练,有自己的逻辑想法.用Python达到自己的学习目的才算有价值.如果是入门学习了解,开始学习不难 ...
- 爬虫-Python入门
通过爬虫程序的编写,进一步理解HTTP协议.用conda建立一个名为crawler的python虚拟环境,在此虚拟环境中用pip或conda安装requests.beautifulsoup4等必要包( ...
- 【爬虫 | Python】解决‘Requests Max Retries Exceeded With Url‘报错的问题
[爬虫 | Python]解决'Requests Max Retries Exceeded With Url in Python'报错的问题 背景 解决方案 一.普遍方案 细致方案 一.问题重述 1. ...
- 爬虫python能做什么 知乎,python网络爬虫能做什么
python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析.挖掘.机器学习等提供重要的数据源.什么是爬虫? (推荐学习:Python视频教程)网络爬虫(又 ...
最新文章
- Failed to open zip file Gradle dependency cache be corrupt
- 超好用的27个谷歌Chrome浏览器使用技巧
- gateway路由网关,zuul的替代品
- php curl读取头,php curl 获取请求头与DNS解析
- python property使用
- 无线系列-无线通信频段与电波传播
- AWS Python应用
- nodejs+java+python网上体育用品销售系统
- 一个产品人和“阿里云”的故事
- 111、爆炸极限的概念
- 网页设计(三)——JavaScript
- epub 免费转换网站
- 中国国际“互联网+”大学生创新创业大赛 武汉理工大学总决赛斩获双金
- 【计算机网络】第三部分 数据链路层(15) 连接局域网、主干网和虚拟局域网
- Dell B1260dn Printer驱动的安装
- 【设计模式】用英雄联盟来解释代理模式
- MTK65XX平台充电调试总结 (转载)
- 啪啪啪!敲代码时你喜欢听什么音乐?
- DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER
- Power BI——EARLIER 函数(对行操作)