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通过线程实现定时器timer的方法
Mar 16 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
python2.7实现爬虫网页数据
May 25 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
python 使用建议与技巧分享(四)
Aug 18 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php 远程关机操作的代码
2008/12/05 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
浅谈PHP中的
2016/04/23 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
js的写法基础分析
2011/01/17 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
python调用百度语音识别api
2018/08/30 Python
python实现二维数组的对角线遍历
2019/03/02 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
英语简历自我评价
2014/01/26 职场文书
会议接待欢迎标语
2014/10/08 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang