投稿    登录
  《Python3网络爬虫开发实战》赠书活动正在进行中!详情请戳赠书活动!欢迎参与!非常感谢!

Python爬虫实战六之抓取爱问知识人问题并保存至数据库

Python 崔庆才 63608浏览 72评论

大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括:

  • Urllib的用法及异常处理
  • Beautiful Soup的简单应用
  • MySQLdb的基础用法
  • 正则表达式的简单应用

环境配置

在这之前,我们需要先配置一下环境,我的Python的版本为2.7,需要额外安装的库有两个,一个是Beautiful Soup,一个是MySQLdb,在这里附上两个库的下载地址,

Beautiful Soup     MySQLdb

大家可以下载之后通过如下命令安装

环境配置好之后,我们便可以开心地撸爬虫了

框架思路

首先我们随便找一个分类地址,外语学习 – 爱问知识人,打开之后可以看到一系列的问题列表。

我们在这个页面需要获取的东西有:

总的页码数,每一页的所有问题链接。

接下来我们需要遍历所有的问题,来抓取每一个详情页面,提取问题,问题内容,回答者,回答时间,回答内容。

最后,我们需要把这些内容存储到数据库中。

要点简析

其实大部分内容相信大家会了前面的内容,这里的爬虫思路已经融汇贯通了,这里就说一下一些扩展的功能

1.日志输出

日志输出,我们要输出时间和爬取的状态,比如像下面这样:

[2015-08-10 03:05:20] 113011 号问题存在其他答案 我个人认为应该是樱桃沟很美的

[2015-08-10 03:05:20] 保存到数据库,此问题的ID为 113011

[2015-08-10 03:05:20] 当前爬取第 2 的内容,发现一个问题 百度有一个地方,花儿带着芳香,水儿流淌奔腾是什么意思 多多帮忙哦 回答数量 1

[2015-08-10 03:05:19] 保存到数据库,此问题的ID为 113010

所以,我们需要引入时间函数,然后写一个获取当前时间的函数

以上分别是获取带具体时间和获取日期的函数,在输出时,我们可以在输出语句的前面调用这函数即可。

然后我们需要将缓冲区设置输出到log中,在程序的最前面加上这两句即可

这样,所有的print语句输出的内容就会保存到out.log文件中了。

2.页码保存

爬虫爬取过程中可能出现各种各样的错误,这样会导致爬虫的中断,如果我们重新运行爬虫,那么就会导致爬虫从头开始运行了,这样显然是不合理的。所以,我们需要把当前爬取的页面保存下来,比如可以保存到文本中,假如爬虫中断了,重新运行爬虫,读取文本文件的内容,接着爬取即可。

大家可以稍微参考一下函数的实现:

这样,不管我们爬虫中途遇到什么错误,妈妈也不会担心了

3.页面处理

页面处理过程中,我们可能遇到各种各样奇葩的HTML代码,和上一节一样,我们沿用一个页面处理类即可。

我们可以用一段含有HTML代码的文字,经过调用replace方法之后,各种冗余的HTML代码就会处理好了。

比如我们这么一段代码:

经过处理后便会变成如下的样子:

经过上面的处理,所有乱乱的代码都会被处理好了。

4.保存到数据库

在这里,我们想实现一个通用的方法,就是把存储的一个个内容变成字典的形式,然后执行插入语句的时候,自动构建对应的sql语句,插入数据。

比如我们构造如下的字典:

构造sql语句并插入到数据库的方法如下:

这里我们只需要传入那个字典,便会构建出对应字典键值和键名的sql语句,完成插入。

5.PHP读取日志

我们将运行结果输出到了日志里,那么怎么查看日志呢?很简单,在这里提供两种方法

方法一:

PHP倒序输出所有日志内容

此方法可以看到所有的输入日志,但是如果日志太大了,那么就会报耗费内存太大,无法输出。为此我们就有了第二种方法,利用linux命令,输出后十行内容。

方法二:

上面两种方法都是5秒刷新一次网页来查看最新的日志。

源代码放送

好了,闲言碎语不多讲,直接上源码了

数据库建表SQL如下:

运行的时候执行如下命令即可

代码写的不好,仅供大家学习参考使用,如有问题,欢迎留言交流。

运行结果查看

我们把PHP文件和log文件放在同一目录下,运行PHP文件,便可以看到如下的内容:

20150908222744

小伙伴们赶快试一下吧。

转载请注明:静觅 » Python爬虫实战六之抓取爱问知识人问题并保存至数据库

喜欢 (139)or分享 (0)

我的个人微信公众号,联系我请直接在公众号留言即可~

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(72)个小伙伴在吐槽
  1. legal to buy sildenafil online http://triviagra.com/ where can you buy sildenafil in new zealand triviagra.com how long does it take for viagra to start to work
    sildenafil2019-01-15 19:16 (16小时前)回复
  2. tadalafil generico contraindicaciones cialis tadalafil to treat enlarged prostate
    http://www.calisgenhea.org/2019-01-15 16:59 (18小时前)回复
  3. where can i get sildenafil to buy in ghana [url=http://viagrapid.com/]viagra online[/url] dose of sildenafil for erectile dysfunction
    buy viagra2019-01-14 14:23 (2天前)回复
  4. DanieleStrei buy generic cialis cialis prescription when will there be a generic cialis [url=http://buyscialisrx.com/]cheap cialis[/url]
    generic cialis online2019-01-13 06:40 (3天前)回复
  5. [url=http://genericalis.com/]cialis prices[/url]
    lowest price for cialis 5 mg2019-01-12 17:49 (4天前)回复
  6. cold medicine and viagra http://viagragenupi.com what is the viagra challenge
    http://viagragenupi.com2019-01-11 06:26 (5天前)回复
  7. [url=http://www.viagrabs.com/]generic viagra online[/url]
    http://viagrabs.com/2019-01-10 13:00 (6天前)回复
  8. tadalafil sudden hearing loss http://www.cialisle.com/ buy generic cialis
    http://cialisle.com2019-01-09 07:03 回复
  9. u http://jcialisf.com jcialisf.com jcialisf.com free cialis samples
  10. uses of sildenafil citrate tablets http://viagrarow.com sildenafil citrate usp monograph [url=http://viagrarow.com/]viagra generico online[/url]
  11. cialis maximum dosage per week http://viagraivo.com tadalafil 20 mg reimport
    ZentMoorospoirl2019-01-08 02:04 回复
1 3 4 5