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 FTP操作类代码分享
May 13 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
python提取包含关键字的整行数据方法
Dec 11 Python
Python Pexpect库的简单使用方法
Jan 29 Python
在Python中append以及extend返回None的例子
Jul 20 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Flask缓存静态文件的具体方法
Aug 02 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中使用反射技术的架构插件使用说明
2010/05/18 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
Python遍历字典方式就实例详解
2019/12/28 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
2014年教师节座谈会发言稿
2014/09/10 职场文书
关于运动会的广播稿
2014/09/22 职场文书
社区好人好事材料
2014/12/26 职场文书
酒店前台辞职书
2015/02/26 职场文书
同意报考证明
2015/06/17 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android