初学爬虫,爬取糗百段子(修改版,亲测)
来源:互联网 发布:高中化学大全软件下载 编辑:程序博客网 时间:2024/06/05 00:49
这几天在网上看爬虫教程,有一个教程觉得写得很好,研究了一下,感谢作者做出这么好的教程。
原网页地址为:http://blog.csdn.net/column/details/why-bug.html
这个代码也是基于原作者爬虫代码修改而来,原网页地址为:http://blog.csdn.net/pleasecallmewhy/article/details/8932310
在代码中,已注释一些自己的理解,详尽之处请参考原文。
另外,暂时还没学会BS4的用法,也没有爬取图片,这些功能也会慢慢修改,欢迎看到此篇文章的人多交流,共同学习。
#-*- coding:utf-8 -*-# from bs4 import BeautifulSoupimport urllib2import reimport timeimport thread#建立一个爬虫的类class spider: def __init__(self): #首先确定加载的页数 self.page = 1 self.pages = [] # 后面有循环 self.loop = False # 扣除段子部分的代码 # 这个部分大部分爬虫都是一样 def getPage(self,page): # 糗事百科地址,这个不要弄错 # 爬其他东西把地址换一下就可以 # 这个部分是伪装成浏览器进入糗百的主页 url = "http://m.qiushibaike.com/hot/page/" + page + '/' user_agent = 'Mozilla/4.0(compatible;MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent} req = urllib2.Request(url,headers = headers) myResponse = urllib2.urlopen(req) # 抓取页面 myPage = myResponse.read() # 对爬下来的内容进行解码,转换成Unicode编码 unicodePage = myPage.decode('utf-8') # soup = BeautifulSoup(myResponse.read()) # contents= soup.find_all('div class="content"','/div') # 还在学BS4爬东西,暂时没用到 # 根据网页源代码的特点找出段子的内容 # 标记为<class="content"></div> contents=re.findall('<div.*?class="content".*?>(.*?)</div>',unicodePage,re.S) list = [] # 将段子保存进列表 for content in contents: list.append(content.replace("\n","")) return list #如果页面中的段子已经扣完,想扣新的段子 def loadPage(self): while self.loop: if len(self.pages) < 2 : # 当加载的段子条数小于两条的时候,读取第二页第三页内容 try: # self.getPage返回的是list[],已经是这一页所有的段子 myPage = self.getPage(str(self.page)) # 这是第二页的第一条 self.page += 1 self.pages.append(myPage) except: print u"无法链接糗事百科" else: time.sleep(1) def showPage(self,nowPage,page): # nowPage中只有一个元素,list遍历出来只打印出于nowPage中相同的元素 for list in nowPage: print u'第%d页\n' % page , list , '\n' next = raw_input('>next\n') if next == "exit": self.loop = False print u"已退出爬虫程序" break def start(self): self.loop = True page = self.page print u"程序正在加载中,正在寻找段子,请稍后....\n" # 多线程是个坑,可以做很多事情 thread.start_new_thread(self.loadPage,()) # 开始加载 while self.loop: # 保证pages中只有不超过两个元素,删除刚才显示的那一条段子 if self.pages: # nowPage内有所有的段子 nowPage=self.pages[0] # 删除第一条,存入下一条 del self.pages[0] self.showPage(nowPage,page) page += 1# 爬虫开始print u"""-----------------浏览糗事百科的段子-------------- 按下任意键继续 退出请输入"exit" 时间:2016.5.1 语言:python 2.7 包:BS,RE,URLLIB2,TIME,THREAD------------------------------------------------"""print u"按下回车浏览今日糗百热门内容:"raw_input('>')if __name__=='__main__' : myModel = spider() myModel.start()
1 0
- 初学爬虫,爬取糗百段子(修改版,亲测)
- python爬虫(7)爬取糗事百科段子(UI版)
- 爬虫-糗事百科段子
- 爬虫 内涵段子
- python 爬虫糗事段子中的段子
- python爬虫学习——爬取糗百页面段子
- 爬虫学习笔记1——爬取糗百段子
- Python爬虫实战(1):爬取糗事百科段子
- Python爬虫实战(1):爬取糗事百科段子
- Python网络爬虫(5)糗事百科段子抓取
- Python爬虫初学(1)
- python爬虫初学(3)
- Python爬虫初学(4)
- Python抓取段子的爬虫
- python实现爬虫抓取段子
- python爬虫爬取段子
- NodeJS-糗事百科段子爬虫
- Python爬虫:抓取内涵段子1000张搞笑图片-上篇(小爬虫诞生篇)
- jdbc的使用
- CentOS 6.5升级Python和安装pip、IPython
- 安装Yii 2
- AdaBoost
- 引用传递和值传递
- 初学爬虫,爬取糗百段子(修改版,亲测)
- 使用Java实战RDD和DataFrame转换操作
- hdu 4706 Children's Day
- 逻辑的力量
- 六、树和二叉树--(3)已知先序遍历和中序遍历求后序遍历
- Mysql使用注意问题
- Collection(practice)
- 我爱学Java之Thread中stop(),suspend(),resume()为什么不安全
- 80. Remove Duplicates from Sorted Array II