非科班小白的求生之路之第二篇初次尝试爬取糗事百科上的文字段子

非科班小白的python求生之路之第二篇

一.开园目的

学习半年之久从来没有来得及整理自己做的一些尝试,现在正是记录在此。本篇目的爬取糗事百科上的文字段子,保存至本地方便阅读。

二.使用工具

主要运用python2.7中urllib2库以及正则表达式re。使用urllib2来打开网页,使用re正则提取信息。由于糗事百科为静态网页可直接观察其url变换规则,获取对应的url地址。

三.前期工作

(1).打开糗事百科首页进入文字板块:https://www.qiushibaike.com/text/.
(2).观察url变换。点击下一页静茹第二页:可查看到url变为:https://www.qiushibaike.com/text/page/2/, 现在已经可以初步判断其url变换规律了,进一步查看第三页,可发现其url为:https://www.qiushibaike.com/text/page/3/, 同时可验证第一页,https://www.qiushibaike.com/text/page/1/, 没有问题,现在可构造所要爬取的url了,上代码:

#p1为每一页的页码为int型,
#当p1=
url="https://www.qiushibaike.com/text/page/"+str(p1)+"/"

(3).通过pyhon中urllib2来打开需要抓取的页面:

#这里设置了请求头
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows XP)'
headers = { 'User-Agent' : user_agent }
request=urllib2.Request(url,headers=headers)
response=urllib2.urlopen(request)
content=response.read()#获取页面内容

(4).对页面内容通过正则解析:

#解析每个段子内容
pattern=re.compile('''.*?div class="content">.*?<span>(.*?)</span>''',re.S)
t=re.findall(pattern,content)
#以下代码用于删除其段子里的换行符<br/>
for i in t:
	t0=re.sub('<br/>','',i)
	print t0

四.正式开始

废话不多说,直接上代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import re
import urllib2
#打开一个txt文档来储存段子到本地
f1=open("D:\python\qiushibaike.txt","a")
#输入爬取的起始页,获取起始页之间的内容包括起始页
p1=int(raw_input("请输入要爬取的页码(起始页):"))
p2=int(raw_input("请输入要爬取的页码(结束页):"))
#爬取页面内容,以下是本次的核心代码
while p1<=p2:
    try:
        print"*"*37+"第%d页"%p1+"*"*37,
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows XP)'
        headers = { 'User-Agent' : user_agent }
        url="https://www.qiushibaike.com/text/page/"+str(p1)+"/"
        request=urllib2.Request(url,headers=headers)
        response=urllib2.urlopen(request)
        content=response.read()
        pattern=re.compile('''.*?div class="content">.*?<span>(.*?)</span>''',re.S)
        t=re.findall(pattern,content)
        for i in t:
            t0=re.sub('<br/>','',i)
            print t0
            f1.write(t0)
    except urllib2.URLError, e:
		if hasattr(e,"code"):
            print e.code
        if hasattr(e,"reason"):
            print e.reason
    p1+=1
f1.close()
print "*"*36+"爬取结束"+"*"*36

以上便是本次任务爬虫实践内容,新手上路还有很多不足之处,比如对变量命名还是比较随意。所以请大家不吝赐教,谢谢!(print “谢谢!”)
最后来一张爬取效果图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值