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 23 Python
Djang中静态文件配置方法
Jul 30 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
python 设置文件编码格式的实现方法
Dec 21 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Python选择网卡发包及接收数据包
Apr 04 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
python新手学习使用库
Jun 11 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 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
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
Nodejs之http的表单提交
2017/07/07 NodeJs
Vue组件的使用教程详解
2018/01/05 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
JS回调函数深入理解
2019/10/16 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
js实现图片实时时钟
2020/01/15 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
python中遍历文件的3个方法
2014/09/02 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
财务会计专业应届毕业生求职信
2013/10/18 职场文书
简历自荐信
2013/12/02 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技