Python 制作糗事百科爬虫实例


Posted in Python onSeptember 22, 2016

早上起来闲来无事做,莫名其妙的就弹出了糗事百科的段子,转念一想既然你送上门来,那我就写个爬虫到你网站上爬一爬吧,一来当做练练手,二来也算找点乐子。

其实这两天也正在接触数据库的内容,可以将爬取下来的数据保存在数据库中,以待以后的利用。好了,废话不多说了,先来看看程序爬取的数据结果

Python 制作糗事百科爬虫实例

值得一提的是,我在程序中想一下子爬取糗事百科 30 页的内容,但是出现了连接错误,当我把页数降到 20 页的时候,程序就可以正常的跑起来了,不知道是什么原因,渴望知道的大神可以告诉我一声,感激不尽。

程序非常简单,直接上源代码咯

# coding=utf8

import re
import requests
from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool
import sys

reload(sys)
sys.setdefaultencoding('utf-8')


def getnewpage(url, total):
 nowpage = int(re.search('(\d+)', url, re.S).group(1))
 urls = []

 for i in range(nowpage, total + 1):
  link = re.sub('(\d+)', '%s' % i, url, re.S)
  urls.append(link)

 return urls


def spider(url):
 html = requests.get(url)
 selector = etree.HTML(html.text)

 author = selector.xpath('//*[@id="content-left"]/div/div[1]/a[2]/@title')
 content = selector.xpath('//*[@id="content-left"]/div/div[2]/text()')
 vote = selector.xpath('//*[@id="content-left"]/div/div[3]/span/i/text()')

 length = len(author)
 for i in range(0, length):
  f.writelines('作者 : ' + author[i] + '\n')
  f.writelines('内容 :' + str(content[i]).replace('\n','') + '\n')
  f.writelines('支持 : ' + vote[i] + '\n\n')


if __name__ == '__main__':

 f = open('info.txt', 'a')
 url = 'http://www.qiushibaike.com/text/page/1/'
 urls = getnewpage(url, 20)

 pool = ThreadPool(4)
 pool.map(spider,urls)
 f.close()

如果其中有不懂得部分,可以依次参考我的前三篇文章。

Python 相关文章推荐
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
python中JWT用户认证的实现
May 18 Python
python Django 反向访问器的外键冲突解决
May 20 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
Python常用类型转换实现代码实例
Jul 28 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 #Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 #Python
Python中将字典转换为列表的方法
Sep 21 #Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 #Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 #Python
python if not in 多条件判断代码
Sep 21 #Python
python中range()与xrange()用法分析
Sep 21 #Python
You might like
PHP个人网站架设连环讲(一)
2006/10/09 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
php正则修正符用法实例详解
2016/12/29 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python实现读取并保存文件的类
2017/05/11 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
遇到的Mysql的面试题
2014/06/29 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
工作表现自我评价
2014/02/08 职场文书
战友聚会主持词
2014/04/02 职场文书
城管大队整治方案
2014/05/06 职场文书
通信工程求职信
2014/07/16 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书