学习半年之久从来没有来得及整理自己做的一些尝试,现在正是记录在此。本篇目的爬取糗事百科上的文字段子,保存至本地方便阅读。
主要运用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 “谢谢!”)
最后来一张爬取效果图: