Python 爬虫 简单实例 爬取糗事百科段子
来源:互联网 发布:七乐彩胆拖兑奖算法 编辑:程序博客网 时间:2024/06/04 18:05
简单实例 爬取糗事百科段子
更多请查看:点击打开链接 点击打开链接
在命令行中浏览
首先,我们来看下糗事百科的首页:点击打开链接
再查看源码可以看到
我们想要的段子都是这样的:
<div class="content">问:你买过最好的假货是什么?<br/>神回答:我曾经买过一本盗版书,竟然把正版书里的个别错别字给改了过来!</div>
这说明只需要用 正则表达式 截取出来就行了
正则表达式:点击打开链接
再看网页的URL,该网页是分页的,所以可以直接枚举页数来访问
即:URL:http://www.qiushibaike.com/hot/page/页数
这样就可以用 Python 把网页下载下来了
但是没伪装头部 headers 还不行
所以要先查看当前网页的 User-Agent
这个在 F12 的 network 里可以看到
然后添加到 headers 里就行了
可见这篇文章:点击打开链接
当然,光访问还不够,还要显示,存储页面
这些在代码中可以看到
利用一个线程下载页面
主线程显示截取的段子
这样使得过程更加流畅,而不是每次显示又去等待下载截取网页
代码如下:
#coding: utf-8##---- A simple spider-----#---- Author: Idaplb -----#-------------------------#---- Enter is next page--#---- q is quit ----------import urllib.requestimport reimport threading, timeclass spider: def __init__(self): self.page = 1 self.pages = [] self.enable = False def get_page(self, page): url = "http://www.qiushibaike.com/hot/page/" + page + "/" user_agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36" headers = {"User-Agent": user_agent} request = urllib.request.Request(url, headers = headers) html_page = urllib.request.urlopen(request).read() html_page = html_page.decode("utf-8") re_item = re.findall("<div.*?class=\"content\">(.*?)</div>", html_page, re.S) items = [] for item in re_item: item = item.replace("\n", "") item = item.replace("<br/>", "\n") items.append(item) return items def load_page(self): while self.enable: if len(self.pages) < 2: try: page = self.get_page(str(self.page)) self.pages.append(page) self.page += 1 except urllib.request.URLError as e: if hasattr(e, "code"): print(e.code) elif hasattr(e, "reason"): print(e.reason) else: time.sleep(1) return def show_page(self, now_page, page): print("Show the %dth page" % (page)) for item in now_page: print(item) flag = input() if flag == "q": self.enable = False break return def start(self): self.enable = True page = self.page print("Loading...") t = threading.Thread(target = self.load_page) t.start() while self.enable: if self.pages: now_page = self.pages[0] del self.pages[0] self.show_page(now_page, page) page += 1 returntest_spider = spider()test_spider.start()
其中按回车出一条段子,输入q 退出
整个过程走一遍并不复杂,只是很多地方要加以注意
0 0
- Python 爬虫 简单实例 爬取糗事百科段子
- python 爬虫 爬取糗事百科段子
- Python爬虫 爬取糗事百科段子
- Python爬虫爬取糗事百科段子
- Python爬虫 爬取糗事百科段子
- 一个爬取糗事百科段子的简单爬虫
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战(1):爬取糗事百科段子
- Python爬虫实战(1):爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战之爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- python爬虫小项目:爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战(六):爬取糗事百科段子
- python爬虫爬取糗事百科的段子
- oracle参数open_cursors和session_cached_cursor详解!
- QCustomPlot之用滚动条控制坐标轴范围
- 指针未初始化问题
- iOS 10 UserNotifications 框架解析
- 【JS】innerHtml用法
- Python 爬虫 简单实例 爬取糗事百科段子
- 为何写flash的时候要地址左移一位?
- 定时器
- iOS App之间常用的五种通信方式及适用场景总结
- 使用国内镜像源来加速python pypi包的安装
- mysqld_multi关闭不了mysql
- C++ 类构造函数的调用顺序
- 【Andoid Studio升级】Android Studio打包时出现一堆错误
- Servlet中Web.xml的配置详解(一)