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

非科班小白的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">.*?(.*?)''',re.S)
t=re.findall(pattern,content)
#以下代码用于删除其段子里的换行符
for i in t: t0=re.sub('
'
,'',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">.*?(.*?)''',re.S)
        t=re.findall(pattern,content)
        for i in t:
            t0=re.sub('
'
,'',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 “谢谢!”)
最后来一张爬取效果图:
非科班小白的求生之路之第二篇初次尝试爬取糗事百科上的文字段子_第1张图片

你可能感兴趣的:(python)