python 案例实用_Python实用练手小案例:爬取百度贴吧小说!

抓取网页信息,并生成txt文件内容!

Python抓取网页技能——Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些模块将网页内容爬取下来,并生成一个txt文件。

(一)实例思路:

我们所需要用到的模块:

urllib2—urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口,这是具有利用不同协议获取URLs的能力,他同样提供了一个比较复杂的接口来处理一般情况,例如:基础验证,cookies,代理和其他。

import urllib2

response=urllib2.urlopen('http://tieba.baidu.com/p/4923127538?see_lz=1')

html = response.read()

re—Python的re模块就是我们开始想知道的大名鼎鼎的正则表达式,正则表达式(可以称为REs,regex,regex pattens)是一个小巧的,高度专业化的编程语言,它内嵌于Python开发语言中,可通过re模块使用。正则表达式的pattern可以被编译成一系列的字节码,然后用C编写的引擎执行。

import re

m = re.search ('ab+','asdfabbbbb')

print m.group()

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32

Type "copyright", "credits" or "license()" for more information.

>>>

========================= RESTART: H:\Python27\1.py ========================= abbbbb6 >>>

re—正则表达式我们本节就不去重点讲了,基础同学们可以去看看正则表达式的详细内容:http://www.runoob.com/python/python-reg-expressions.html。在我的博客中有详细的正则表达式(字符)详解!

那么接下来我们开始我们的小实例——爬取百度贴吧小说!

首先我们要明确一下我们项目的思路:

# -*- coding: utf-8 -*-

#模块:urllib2, re。

#正则表达式:------想要的内容 findall(正则表达式;源码)

#百度贴吧爬取内容:1.获取源码

# 2.解析超链接

# 3.获取标题

# 4.获取内容

# 5.发送命令,调用主函数

我们在进行项目时要将整体突出程序化,那么我们开始第一步的实施调取Python中自带的模块:

# -*- coding: utf-8 -*-

import urllib24 import re

将我们所需的模块插入后,我们开始项目的实施:

class BDTB:

baseUrl = 'http://tieba.baidu.com/p/4923127538?see_lz=1'

#获取源代码

def getPage(self,pageNum):

try:

url = self.baseUrl + str(pageNum)

request = urllib2.Request(url)

response = urllib2.urlopen(request).read()

#print response

return response

except Exception,e:

print e

上述代码是我们要获取的网页源码信息,因为我们需要多方面的爬取我们想要的内容,所以我们创建一个类来实现其中所有函数的功能。

baseUrl = 'http://tieba.baidu.com/p/4923127538?see_lz=1'

baseUrl就是我们想要获取的网址!

def getPage(self,pageNum):

try:

url = self.baseUrl + str(pageNum)

request = urllib2.Request(url)

response = urllib2.urlopen(request).read()

#print response

return response

except Exception,e:

print e

网址获取到了之后,我们要定义一个函数,来获取我们想要获取的网页信息,在函数中我们定义了两个变量,这两个变量是我们正则匹配时要需要用到的!

我们在其中所用到的:

try:

语句1

语句2

.

.

语句N

except Exception e:

print e

这样的语句就是判断我们的程序有没有错误,看我们是否获取到我们想要的信息,如果没有获取到就给编译器返回一个e值!

接下来我们要使用我们的正则表达式来获取其中我们想要的内容了!

def Title(self,pageNum):

html = self.getPage(pageNum)

reg = re.compile(r'title="这(.*?)"')

items = re.findall(reg,html)

print items[0]

for item in items:

f = open('text1.txt','w')

f.write('标题'+'\t'+item)

f.close()10

return items

这一段定义的函数是将我们所获取到的网页信息,匹配到我们想要的位置,然后截取下来!并且将网页匹配的信息生成一个text1.txt的文本文件,‘w’就是写入信息!

reg = re.compile(r'title="这(.*?)"')

这里我们就用到了re模块中的包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。

参数描述:

pattern匹配的正则表达式string要匹配的字符串。

flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

>>> import re

>>> repp = 'a,b,,,,c d'

>>> reOB = re.compile('[, ]+')

>>> reOB.split(some_text)

['a', 'b', 'c', 'd']

接下来我们再看另一个re模块中的函数python 正则表达式 re findall 方法能够以列表的形式返回能匹配的子串。re.findall(pattern, string[, flags]):

items = re.findall(reg,html)

我们来看一下这个函数的实例:

>>> import re

>>> p = re.compile(r'\d+')

>>> print p.findall('one1two2three3four4')

['1', '2', '3', '4']

>>>

将我们我所要查询到的数字以列表的形式输出出来!

for item in items:

f = open('text1.txt','w')

f.write('标题'+'\t'+item)

f.close()

在这段代码中,我们用到了Python文件写入,这个地方就是生成我们txt文本文件的地方,同学门可以找找详细的资料来研究一下,这里是对于想保存长期看的同学有很大的帮助哦!在这里我就不详细讲解了!

我们继续我们的项目:

def Text(self,pageNum):

html = self.getPage(pageNum)

reg = re.compile(r'class="d_post_content j_d_post_content ">            (.*?)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值